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
来测试两个节点之间是否存在连接:
isConnected(X1, X2) :- edge(X1, X2).
和
isConnected(X1, X2) :- edge(X1, X), isConnected(X, X2).
但我不确定如何从这里开始。我知道我应该有一个dist
过程来调用isConnected
and 并且是移动到下一个边缘的结果,然后将结果添加到类似L is Length
. 但我不知道该怎么做。
任何帮助,将不胜感激!