验证两个列表的组合是否等于另一个

时间:2018-03-16 11:39:18

标签: list recursion prolog

我希望定义一个函数plak/3,这样当将Y附加到X时,plak(X,Y,Z)会返回true,结果为Z.所以有些示例:

?- plak([1,2], [2,3], [1,2,2,3]).
true
?- plak([1,2,3], [4,5], X).
X = [1,2,3,4,5].
?- plak(X,[2,3,4],[1,2,3,4]).
X = [1].

现在我的想法是

plak([],[],[]).
plak([X|Xs], Y, [Z|Zs]) :-
    X==Z,
    plak(Xs, Y, Zs).
plak(X, [Y|Ys], [Z|Zs]) :-
    Y==Z, 
    plak(X,Ys,Zs).

但这不起作用。

1 个答案:

答案 0 :(得分:1)

%if the first list is empty, add the second list to the end of the output list
concatenate([],List2,List2).
%take the first element of the first list, put it in the output list.
%Do this for all elements until the first list is empty
concatenate([H|T], List2, [H|T2]) :- concatenate(T, List2, T2).

列表实际上是一个元素链,其中每个元素链接到下一个元素。链表。最后一个原子总是[],所以这允许我们通过将一个列表附加到另一个仍然打开的列表的末尾来结束其他列表。

有用的链接,以了解Prolog中的初学者的基本概念: