edge(a, b).
edge(b, d).
edge(d, c).
edge(d, e).
edge(d, f).
edge(e, g).
edge(f, g).
edge(g, h).
(すべてのエッジが同じ長さであると仮定します)。
たとえば、a と d の間のパスの長さを取得するには、 を
?- length(a,d)
返す必要があり2*constant (a->b and b->d)
ます。
isConnected
2 つのノード間に接続があるかどうかをテストするために呼び出しを開始した再帰手順を実行することを知っています。
isConnected(X1, X2) :- edge(X1, X2).
と
isConnected(X1, X2) :- edge(X1, X), isConnected(X, X2).
しかし、ここから先に進む方法がわかりません。anddist
を呼び出すプロシージャが必要であることはわかっています。その結果、次のエッジに移動し、次のような結果を追加します。しかし、これを行う方法がわかりません。isConnected
L is Length
どんな助けでも大歓迎です!