#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)];