% append([1,2,3], [4,5,6], [1,2,3,4,5,6]) % is_list(X). append([], Y, Y) :- is_list(Y). append([X | Xs], Y, [X | R]) :- append(Xs, Y, R). % rev([1,2,3], [3,2,1]). rev([], []). rev([X|Xs], Y) :- rev(Xs, Revs), append(Revs, [X], Y). % elem([a,b,c], 1, b). elem([X|_], 0, X). % elem([_|Xs], N, Y) :- K is N - 1, elem(Xs, K, Y). % elem([_|Xs], N, Y) :- elem(Xs, K, Y), N is K + 1.