【问题标题】:What is wrong in this Prolog clause?这个 Prolog 子句有什么问题?
【发布时间】:2014-04-25 02:19:41
【问题描述】:

我需要在序言中写出表达以下句子的子句

“除了约翰,每个人都会死”

这是我的条款:

not(mortal(john)).

mortal(_).

但是当我查询 ?- mortal(john). 时,它返回的是 true 而不是 false。

怎么了?

【问题讨论】:

  • mortal(_). 表示任何人都会死。而且您的事实相互矛盾(您说两者都是事实)。你需要类似mortal(X) :- X \= john. 的东西(如果X 不是johnX 是致命的)。 “事实”not(mortal(john)). 不是表达约翰死亡或死亡事实的正确方式。

标签: prolog


【解决方案1】:

没有错。

你有两个事实:-

not(mortal(john)).
mortal(_).

运行查询 ?- mortal(john). 无法绑定第一个事实,因为它在结构上不同,但它可以绑定第二个事实。

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多