projog

3.102. append(ListOfLists, List) - concatenates a list of lists.

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