Prolog打印所有解决方案并希望获得是/否输出

Luk*_*vic 1 prolog

我刚刚开始学习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)

Fab*_*tor 5

yes和之间没有区别true.这只是Prolog实现之间的区别.例如,我们进入trueSWI-Prolog和yesGNU 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)