The append(ListOfLists, List) goal succeeds if the concatenation of lists contained in ListOfLists matches the list List.
Examples
?- append([], []).
yes
?- append([[]], []).
yes;
no
?- append([[a]], [a]).
yes;
no
?- append([[a,b,c],[d,e,f,g,h]], [a,b,c,d,e,f,g,h]).
yes;
no
?- append([[a,b,c],[d,e,f,g,h]], [a,b,c,d,e,f,g,x]).
no
?- append([[a,b,c],[[d,e,f],x,y,z],[1,2,3],[]],X).
X = [a,b,c,[d,e,f],x,y,z,1,2,3]
yes;
no
?- append([[a,b,c],[[d,e,f],x,y,z],[1,2,3],[]],[a,b,c,[d,e,f],x|X]).
X = [y,z,1,2,3]
yes;
no
?- append([X,[Y],Z], [a,b,c,d,e]).
X = []
Y = a
Z = [b,c,d,e]
yes;
X = [a]
Y = b
Z = [c,d,e]
yes;
X = [a,b]
Y = c
Z = [d,e]
yes;
X = [a,b,c]
Y = d
Z = [e]
yes;
X = [a,b,c,d]
Y = e
Z = []
yes;
no
?- append(a, X).
Expected LIST but got: ATOM with value: a
?- append(Y, X).
Expected LIST but got: VARIABLE with value: Y
?- append([a], X).
no
?- append([1], X).
no
?- append([[a,b|X],[c,d]], Y).
X = []
Y = [a,b,c,d]
yes;
X = [X]
Y = [a,b,X,c,d]
yes;
X = [X,X]
Y = [a,b,X,X,c,d]
yes;
X = [X,X,X]
Y = [a,b,X,X,X,c,d]
yes;
X = [X,X,X,X]
Y = [a,b,X,X,X,X,c,d]
yes
?- append([[a,b],[c,d|X]], Y).
X = []
Y = [a,b,c,d]
yes;
X = [X]
Y = [a,b,c,d,X]
yes;
X = [X,X]
Y = [a,b,c,d,X,X]
yes;
X = [X,X,X]
Y = [a,b,c,d,X,X,X]
yes;
X = [X,X,X,X]
Y = [a,b,c,d,X,X,X,X]
yes
?- append([[a,b|X],[e,x|Y]], [a,b,c,d,e,x,y,z]).
X = [c,d]
Y = [y,z]
yes;
no
?- append([[a,b|X],[e,x|Y]], [a,b,c,d,e,x,y|Z]).
X = [c,d]
Y = [y]
Z = []
yes;
X = [c,d]
Y = [y,X]
Z = [X]
yes;
X = [c,d]
Y = [y,X,X]
Z = [X,X]
yes;
X = [c,d]
Y = [y,X,X,X]
Z = [X,X,X]
yes
?- append([[a,b|X],[e,x|Y]], [a,b,c,d,e,x,y|Z]), Z=[1,2,3], !.
X = [c,d]
Y = [y,1,2,3]
Z = [1,2,3]
yes;
no
?- append([X],Y).
X = []
Y = []
yes;
X = [X]
Y = [X]
yes;
X = [X,X]
Y = [X,X]
yes;
X = [X,X,X]
Y = [X,X,X]
yes