【问题标题】:Why is this Prolog program returning true AND false?为什么这个 Prolog 程序返回真假?
【发布时间】:2019-12-22 19:31:05
【问题描述】:

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

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

?- predicate1(abc,[]).

感谢您的帮助。

【问题讨论】:

  • 这会被问到很多。首先要意识到谓词不是返回真假。它是成功还是失败。当它成功并找到解决方案时,它会显示true。如果它回到一个选择点寻找另一个解决方案但没有找到,那么它会失败(找到另一个解决方案)\并说false

标签: prolog prolog-toplevel


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多