我是Prolog的新手,请尝试了解为什么这个非常简单的程序会返回2个解决方案:true和false。对我来说,这应该只返回true,为什么还返回false?
predicate1(_,[]).
predicate1(X,[_|T]) :- predicate1(X,T).
?- predicate1(abc,[]).
感谢您的帮助。
答案 0 :(得分:0)
您的目标与谓词的第一个子句(事实)相统一:
?- predicate1(abc,[]) = predicate1(_,[]).
true.
因此,查询返回true
作为其第一个结果。但是会创建一个选择点,因为谓词还有第二条子句(一条规则)。由于目标和规则首部的统一失败,您在寻求第二种解决方案时会得到false
:
?- predicate1(abc,[]) = predicate1(X,[_|T]).
false.