我有这种类型的知识库:
connect(a, b).
connect(a, d).
connect(a, e).
connect(b, a).
connect(b, c).
...
我的目标是,给定一个起源和一个命运,在到达最终节点之前遍历所有现有节点一次。
到目前为止,这就是我所得到的:
path(O, D, L):-
path(O, D, [O], L).
path(D, D, _, [D]).
path(O, D, A, [O|T]):-
connect(O, I),
\+ member(I, A),
path(I, D, [I|A], T).
为了处理双重连接,例如connect(a, b). connect(b, a).
,我使用一个列表来保存我经过的每个节点,并且在进入递归调用之前,我确保我要访问的节点不属于该列表。
现在我需要确保在到达最后一个节点之前遍历所有现有节点。我完全不知道如何解决这个问题。我怎么能确定我在到达最后一个节点之前访问了所有其他节点?