所以我有2个列表,连接起来后应该返回一个如下所示的列表
| ?-concat([a,b,c],[1,2,3,4],X)。
X = [a,b,c,1,2,3,4];
X = [a,b,1,c,2,3,4];
X = [a,b,1,2,c,3,4];
X = [a,b,1,2,3,c,4];
X = [a,b,1,2,3,4,c];
...
所以我写了这段代码来回答这个问题:
concat([], Y, Y).
concat([E|X], Y, [E|Z]) :- concat(X,Y,Z).
concat(X, Y, [Y|X]).
但我将其作为输出
?-concat([a,b,c],[1,2,3,4],X)。
X = [a,b,c,1,2,3,4];
X = [a,b,c,[1,2,3,4]];
X = [a,b,[1,2,3,4],c];
X = [a,[1,2,3,4],b,c];
X = [[1、2、3、4],a,b,c]。
我是Prolog的新手,所以我不确定自己的错在哪里,我们将不胜感激
答案 0 :(得分:0)
您的问题在第三行:
concat(X, Y, [Y|X]).
[Y|X]
不是Y
的所有元素的列表,其后是X
的所有元素,它是一个列表,其第一个元素是列表Y
,并且那么其余元素就是X的元素。
我下面的代码如下:
concat([], [], []).
concat([E|X], Y, [E|Z]) :- concat(X,Y,Z).
concat(X, [F|Y], [F|Z]) :- concat(X,Y,Z).
您拥有concat([], Y, Y).
的第一行效果很好,但我认为我的方法更简洁,更对称,这是归纳法的基础。