#3
The function add adds two quantities in the representation of #2:
add([], M) => M;       // first list is empty
add(L, []) => L;       // second list is empty
add([[A, I] | L], [[A, J] | M]) => [[A, I+J] | add(L, M)];  // same units
add([[A, I] | L], [[B, J] | M]) =>                          // different units
  A < B ? [[A, I] | add(L, [[B, J] | M])]                   // use sorted property
        : [[B, J] | add([[A, I] | L], M)];