这是我得到的问题:
定义Prolog谓词路径(X,Y,G),其中path(-,-,+)为 当在有向图G中存在从节点X到节点Y的路径时为true, 其中的图形由边的列表表示,每个边由 源和目标节点的两元素列表。
这是示例输出:
?- path(b,Y,[[a,b],[b,c],[b,d],[d,e]]).
Y = c ;
Y = d ;
Y = e ;
no
?- path(X,b,[[a,b],[b,c],[b,d],[d,e]]).
X = a ;
no
?- path(c,e,[[a,b],[b,c],[b,d],[d,e]]).
yes
这与我在网上看到的其他示例不同,在这些示例中,节点遍历是诸如以下事实:
canTraverse(a,b).
canTraverse(b,c).
等
所以我很困惑。
这是我到目前为止所得到的:
path(X, Y, G) :-
(
G = [CurrentPair | EverythingElse],
CurrentPair = [X1 , Y1| _],
=(X, X1),
=(Y, Y1)
)
;
path(X, Y, EverythingElse).
如果两个节点X和Y一起在一对/列表中,这似乎可以工作。但是我不确定如何使它遍历节点。
答案 0 :(得分:0)
图形是有向的,没有循环。
基本情况可以为path(X, Y, G) :- member([X,Y],G).
,而递归情况可以说是存在从X到Y的路径,从X到某个中间音符然后找到从中间到Y的路径。