Here's an example session.
$ gprolog GNU Prolog 1.2.7 | ?- consult(user). first(A,X) :- append([A],_,X). second(B,X) :- append([_,B],_,X). final(Z,X) :- append(_,[Z],X). nexttolast(Z,X) :- append(_,[Z,_],X). triple(X) :- append(A,B,X), append(A,A,B). [ctrl/D] | ?- first(3,[3,4]). Yes | ?- first(3,[4,3]). No | ?- first(X,[3,4]). X=3 Yes | ?- second(3,[2,3,4]). Yes | ?- second(3,[3,4,5]). No | ?- final(3,[1,2,3]). Yes | ?- final(3,[3,2,1]). No | ?- triple([3,4,3,4,3,4]). Yes | ?- triple([3,3,4]). No | ?- consult(user). insert(Y,A,X) :- append(B,C,Y), append(D,C,X), append(B,[A],D). [ctrl/D] | ?- insert([1,3],2,[1,2,3]). Yes | ?- insert([1,3],2,[1,2,4]). No | ?- insert([1,3],X,[1,2,3]). X = 2 Yes | ?- insert([1,2],X,[1,2,3]). X = 3 Yes | ?- insert([1,1],X,[1,1,1]). X = 1; X = 1; X = 1; No | ?- insert(X,2,[1,2,3,2,4]). X = [1,3,2,4]; X = [1,2,3,4]; ERROR: Out of global stack
Minor points. No space between consult and (user). If you enter | ?- consult (user). you'll get an "uncaught exception" meaning a syntax error on that line. Just enter the correct statement next. To exit prolog, enter ctrl/c, then enter e.