我刚刚开始学习Prolog,我的任务是写一个谓词poklapanje(M,V),如果列表M的所有元素都是列表V的第一个元素,则返回yes,例如poklapanje([1,2],[1, 2,3])应该返回是.我的第一个问题是真实和是的区别是什么,因为我在我的解决方案中变得真实?第二,当我输入poklapanje(X,[1,2,3])时,我应该得到:
X = [];
X = [1];
X = [1,2];
X = [1,2,3];
no
Run Code Online (Sandbox Code Playgroud)
我得到:
X = [];
false
Run Code Online (Sandbox Code Playgroud)
为什么?我想它与我的实现有关,并且打印true/false而不是yes/no.
这是我的代码:
poklapanje([],[_|_]).
poklapanje([A|B],[C|D]):- A == C, poklapanje(B,D).
Run Code Online (Sandbox Code Playgroud)
yes
和之间没有区别true
.这只是Prolog实现之间的区别.例如,我们进入true
SWI-Prolog和yes
GNU Prolog.
我不确定你是如何提出你的问题的.这是运行代码的输出:
?- poklapanje(X,[1,2,3]).
X = [] ;
X = [1] ;
X = [1, 2] ;
false.
Run Code Online (Sandbox Code Playgroud)
它失踪了[1, 2, 3]
因为poklapanje([],[_|_]).
失败了poklapanje([],[]).
我会像这样实现它:
poklapanje([], _).
poklapanje([A|B],[A|D]) :- poklapanje(B,D).
Run Code Online (Sandbox Code Playgroud)