I'm reading Programming in Prolog: Using the ISO Standard, but I'm having problems understanding the recursive definition of append
introduced by the book:
append([], List, List).
append([X|List1], List2, [X|Result]) :- append(List1, List2, Result).
For example:
?- append([a, b, c], [3, 2, 1], Result).
Result = [a, b, c, 3, 2, 1]
As far as I understand, the definition says that the resulting list should contain the head of the first list as its head, so initially the resulting list is [ a ]
. Then, we recursively run append()
on the tail of the first and third argument, leaving the second one as it is, so the third argument (which is [ a ]
), should contain the head of the new first argument as its head, so the resulting list is [ b, a ]
(which is backwards, so clearly I'm not following correctly). At some point, the first list is []
, and the resulting array is [ c, b, a ]
, so we hit the base case:
append([], List, List).
So append([], [3, 2, 1], [ c, b, a ]).
, which makes no sense at all. I also don't follow how the contents of the second list are taken into consideration if no manipulation is performed on it in the whole definition.