【发布时间】:2018-03-16 11:39:18
【问题描述】:
我正在寻找定义一个函数 plak/3 以便 plak(X,Y,Z) 在将 Y 附加到 X 时返回 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).
但这不起作用。
【问题讨论】:
-
这正是
append/3(内置谓词)所做的。这里是 swi 中的实现:github.com/SWI-Prolog/swipl-devel/blob/master/library/lists.pl -
@damianodamiano 引用 GitHub 源代码文件时,您可以通过附加 #L 和行号直接引用一行。例如
lists.pl#L118- 工作link -
==检查术语的等价性,您要做的是统一由=完成的术语,或者只是将变量放在您希望统一的位置。