Prolog问题有一些问题:
以下子句表示一个有向图,其中节点是原子,边由连接谓词表示。鉴于以下子句在数据库中,请回答以下两个问题。
connected(a,b).
connected(b,d).
connected(b,e).
connected(b,f).
connected(a,c).
connected(c,f).
connected(c,g).
connected(h,c).
path(X,Y) :- connected(X,Y).
path(X,Z) :- connected(X,Y), path(Y,Z).
显示 Prolog 查询,该查询返回具有两个或多个不同传入边的所有节点(即,至少有两个不同的节点连接到它)。此外,显示输入查询的结果(询问每个解决方案)。您的查询可能会多次返回同一个节点,并且可能会打印出查询中其他变量的值。表示相关节点的变量应称为 DNode。
到目前为止,我有:
path(DNode,__) , path(__,DNode).
但这只给我b和c
我认为具有多个节点的字母是a, b, c, f。
我试过这个来获得a、b和c:
path(__,DNode),path(DNode,__) ; path(DNode,__) , path(DNode,__).
但我得到了a, b, c和h。
我假设我必须喜欢这样才能获得我想要的所有字母:
path(__,DNode),path(DNode,__) ; path(DNode,__) , path(DNode,__) ; path(__,DNode) , path(__,DNode).
它给了我 a、b、c、e、f、g 和 h。
任何关于如何获得我想要的 4 个字母的建议将不胜感激。