【发布时间】:2011-10-18 03:56:38
【问题描述】:
在 Prolog 中表达全序关系的最佳方式是什么?
例如,假设我有一组事实
person(tim)
person(ana)
person(jack)
...
关于一个人的财富,我想表达以下事实:对于每两个人 X 和 Y,如果不是 (X==Y),则要么 X 比 Y 富有,要么 Y 比 X 富有。
所以我的问题是richer 子句应该能够实例化它的变量,并确保richer(X, Y) 和richer(Y, X) 永远不会同时出现。
这是一个更好的例子,可以理解我的意思:
person(tim).
person(john).
happier(tim, john).
hates(X, Y) :- person(X), person(Y), richer(Y, X).
hates(X, Y) :- person(X), person(Y), richer(X, Y), happier(Y, X).
现在查询 hats(john, tim) 的答案应该返回 true,因为如果 richer 满足上述属性,那么这两个 hats 子句之一必须为 true。在基于分辨率的推理引擎中,我可以断言事实 (richer(X, Y) V richer(Y, X)) 并且谓词 hats(john, tim) 可以被证明是正确的。 我不希望能够以相同的方式在 Prolog 中以相同的方式表达这一点。但是,我怎样才能实现这个条件,以便给定的例子可以工作?
还要注意,我不知道谁更富有:蒂姆或约翰。我刚才说一个比另一个更富有。
谢谢。
【问题讨论】:
标签: prolog relationship