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

时间:2019-12-22 19:31:05

标签: prolog prolog-toplevel

我是Prolog的新手,请尝试了解为什么这个非常简单的程序会返回2个解决方案:true和false。对我来说,这应该只返回true,为什么还返回false?

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

?- predicate1(abc,[]).

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

?- predicate1(abc,[]) = predicate1(_,[]).
true.

因此,查询返回true作为其第一个结果。但是会创建一个选择点,因为谓词还有第二条子句(一条规则)。由于目标和规则首部的统一失败,您在寻求第二种解决方案时会得到false

?- predicate1(abc,[]) = predicate1(X,[_|T]).
false.