%	The standard introductory examples for Prolog

cat([], X, X).
cat([A|B], C, [A|D]) :- cat(B, C, D).

reverse([], []).
reverse([A|B], X) :- reverse(B, C), cat(C, [A], X).

%	A more efficient version of reverse

rev(L1, L2) :- revzap(L1, [], L2).

revzap([X|L], L2, L3) :- revzap(L, [X|L2], L3).
revzap([], L, L).
