为什么不这项工作在序言定义“结婚”?
married(X,Y):-married(Y,X).
在这些类型的圆形谓词不被允许? 我将如何解决?
谢谢
为什么不这项工作在序言定义“结婚”?
married(X,Y):-married(Y,X).
在这些类型的圆形谓词不被允许? 我将如何解决?
谢谢
原谅我,如果我得到的语法错误,它是因为我打的Prolog已经有一段时间。
一个典型的解决方案是引入另一层次的条文,如下所示:
married(X, Y) :- wife(X, Y).
married(X, Y) :- wife(Y, X).
然后指定使用的妻子,而不是条款的关系:
wife(jane, bob).
wife(alice, john).
?- married(jane, X).
X = bob
更多信息可以在这里找到: 中信建投8710,演绎数据库和逻辑编程,第6章-逻辑和数据库 ,6.5项-特殊关系。
据我了解,基本的问题是,如果循环定义是允许的,但所产生的语言是自洽的,有可能是微妙的后果往往是反直觉的。 也有效率的考虑(循环定义招致额外的开销)。
看到这个详细的讨论了其它更多的解释和观点相当多的不同点。
一个可能的解决方案是使用桌游戏,例如见这个答案 。