【发布时间】:2017-04-16 21:37:35
【问题描述】:
我有一个简单的序言程序,它试图根据信任规则和知道规则来确定谁信任谁。在这里
know(joe,jack).
know(joe,sue).
know(joe,betty).
know(sue,betty).
know(jack,betty).
know(bill,betty).
knows(X,Y):- know(X,Y);know(Y,X).
trust(jack,joe).
trust(bill,joe).
trust(betty,jack).
knows 规则是对称且可传递的,trusts 规则由
定义Person X trusts Y if and only if
-X inherently trusts Y, or
-X knows two DIFFERENT people who trust Y.
信任不是对称的,也不是传递的。
我不确定如何在规则中执行规则,变量似乎让我很困惑,因为试图只使用 2 个变量作为参数,但在规则中使用 4。任何帮助将不胜感激,谢谢。
【问题讨论】:
-
首先,只有一个小提示:要表示两个术语不同,您可以使用谓词
dif/2。请参阅prolog-dif 了解更多信息。完全没有问题,只有您在规则正文中使用的一些变量出现在头部。事实上,这是一个比较典型的案例。关键是要以声明的方式考虑它,即使用您需要的任何其他变量来描述必须为参数保留的约束。 -
@mat 我已经创建了这条规则,但由于某种原因它导致了无限循环。信任(X,Y):-差异(A,B),知道(X,A),信任(A,Y),知道(X,B),信任(B,Y)。知道为什么会这样吗?
标签: parameters prolog rules