转载自:https://mp.weixin.qq.com/s/tkLM2F9yAkcOmszp_-DFow
?- [user].
|: append([],L,L).
|: append([H|T],L2,[H|L3]) :- append(T,L2,L3).
|: ^D% user://2 compiled 0.00 sec, 2 clauses
true.
?- append([a,b,c],[1,2,3],[a,b,c,1,2,3]).
true.
?- append([a,[foo,gibble],c],[1,2,[[],b]],[a,[foo,gibble],c,1,2,[[],b]]).
true.
?- append([a,b,c],[1,2,3],[a,b,c,1,2]).
false.
?- append([a,b,c],[1,2,3],[1,2,3,a,b,c]).
false.
?- append([a,b,c],[1,2,3],L3).
L3 = [a, b, c, 1, 2, 3].
?- trace.
true.
[trace] ?- append([a,b,c],[1,2,3],X).
Call: (10) append([a, b, c], [1, 2, 3], _5362) ? creep
Call: (11) append([b, c], [1, 2, 3], _5626) ? creep
Call: (12) append([c], [1, 2, 3], _5632) ? creep
Call: (13) append([], [1, 2, 3], _5638) ? creep
Exit: (13) append([], [1, 2, 3], [1, 2, 3]) ? creep
Exit: (12) append([c], [1, 2, 3], [c, 1, 2, 3]) ? creep
Exit: (11) append([b, c], [1, 2, 3], [b, c, 1, 2, 3]) ? creep
Exit: (10) append([a, b, c], [1, 2, 3], [a, b, c, 1, 2, 3]) ? creep
X = [a, b, c, 1, 2, 3].
[trace] ?- notrace.
true.
[debug] ?- nodebug.
true.
?- append(X,Y,[a,b,c,d]).
X = [],
Y = [a, b, c, d] ;
X = [a],
Y = [b, c, d] ;
X = [a, b],
Y = [c, d] ;
X = [a, b, c],
Y = [d] ;
X = [a, b, c, d],
Y = [] ;
false.
?- [user].
|: prefix(P,L):-append(P,_,L).
|: ^D% user://3 compiled 0.00 sec, 1 clauses
true.
?- prefix(X,[a,b,c,d]).
X = [] ;
X = [a] ;
X = [a, b] ;
X = [a, b, c] ;
X = [a, b, c, d] ;
false.
?- [user].
|: suffix(S,L):-append(_,S,L).
|: