0

我正在尝试编写一个谓词,该谓词在无环图中写出从一个节点到另一个节点的所有方式。如果我有这些节点/边。

node(x,y).
node(x,z).
node(y,z).

然后我尝试了类似的东西:

predicate(X,Y):-
    node(X,Y),
    ...

但不知何故,我需要递归地执行此操作,我需要帮助。有人有什么想法吗?谢谢

4

1 回答 1

0

它可能在这方面工作得很好。(但我对 Prolog 不太熟悉。)

route(X, Z, [])    :-  node(X, Z).
route(X, Z, [Y|T]) :-  node(X, Y), route(Y, Z, T).

进而

?- findall(E, route(x, z, E), Routes).
% ==> Routes = [[], [y]].

+ 编辑

print_all_routes(X, Y) :- findall(E, (route(X, Y, E), write(E), nl), _).
于 2014-10-07T12:10:47.403 回答