1

我正在Prolog中做一些家庭作业,我必须使用足够类似的东西:

规则:

brothers(a,b)
brothers(c,d)

而且我必须实现查询brothers(b,a)和获取真实的能力,而不会在数据库中重复。

我考虑过使用:brothers(X,Y):- brothers(Y,X)但它只是无限递归。我不确定我还能做什么,因为两个名称必须相同。

4

1 回答 1

3

好吧,你必须打破无限递归!这可以通过多种方式完成:

1)订购
在每个brother(X,Y)规则中创建您的数据库X>Y。然后,添加一条规则brother(X,Y):- Y>X, brother(Y,X).

2) 包装谓词
brother(X,Y):- brother_facts(X,Y) ; brother_facts(Y,X).

3)
如果您使用 XSB(或其他一些支持它的 prolog 实现),则可以使用表格。制表有点像记忆,会打破循环

于 2012-11-05T09:21:19.407 回答