Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在Prolog中做一些家庭作业,我必须使用足够类似的东西:
规则:
brothers(a,b) brothers(c,d)
而且我必须实现查询brothers(b,a)和获取真实的能力,而不会在数据库中重复。
brothers(b,a)
我考虑过使用:brothers(X,Y):- brothers(Y,X)但它只是无限递归。我不确定我还能做什么,因为两个名称必须相同。
brothers(X,Y):- brothers(Y,X)
好吧,你必须打破无限递归!这可以通过多种方式完成:
1)订购 在每个brother(X,Y)规则中创建您的数据库X>Y。然后,添加一条规则brother(X,Y):- Y>X, brother(Y,X).
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).
brother(X,Y):- brother_facts(X,Y) ; brother_facts(Y,X).
3) 如果您使用 XSB(或其他一些支持它的 prolog 实现),则可以使用表格。制表有点像记忆,会打破循环