Prolog允许多个查询参数顺序

时间:2012-11-05 06:35:00

标签: function prolog

我正在Prolog做一些功课,我必须使用类似的东西:

规则:

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

我必须实现查询brothers(b,a)的能力,并且在数据库中没有重复的情况下才能生效。

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

1 个答案:

答案 0 :(得分: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实现),则可能。 Tabling有点像memoization并将打破循环