为什么这个Prolog程序返回true和false?

为什么这个Prolog程序返回true和false?,prolog,prolog-toplevel,Prolog,Prolog Toplevel,我不熟悉Prolog,并且试图理解为什么这个非常简单的程序返回两个解决方案:true和false。对我来说,这应该只归真,为什么也归假呢 predicate1(_,[]). predicate1(X,[_|T]) :- predicate1(X,T). ?- predicate1(abc,[]). 感谢您的帮助。您的目标与谓词的第一个子句(事实)相一致: ?- predicate1(abc,[]) = predicate1(_,[]). true. 因此,查询返回true作为其第一个结果。

我不熟悉Prolog,并且试图理解为什么这个非常简单的程序返回两个解决方案:true和false。对我来说,这应该只归真,为什么也归假呢

predicate1(_,[]).
predicate1(X,[_|T]) :- predicate1(X,T).

?- predicate1(abc,[]).

感谢您的帮助。

您的目标与谓词的第一个子句(事实)相一致:

?- predicate1(abc,[]) = predicate1(_,[]).
true.
因此,查询返回
true
作为其第一个结果。但选择点是创建的,因为谓词有第二个子句(规则)。由于目标和规则负责人的统一失败,当要求第二个解决方案时,您会得到
false

?- predicate1(abc,[]) = predicate1(X,[_|T]).
false.
这个问题被问了很多。首先要意识到谓词没有返回true或false。它是成功还是失败。当它成功并找到解决方案时,将显示
true
。如果它返回到一个选择点以找到另一个解决方案,但没有找到,那么它将失败(找到另一个解决方案),并显示
false