我有一个谓词是双向的,并告诉一个节点是否连接到另一个节点。 例如列出所有可到达的节点
has(a, b).
has(b, c).
has(d, b).
现在我想列出所有可以达到(从一个特定节点)具有给定步数的节点。
connected_nodes(a, T, 2).
因此应该输出
T = c
T = d
我当前的代码看起来是这样的:
connected_nodes(A, B, 0) :- write(A).
connected_nodes(A, B, N) :-
N > 0, M is N - 1,
has(A, X),
connected_nodes(X, B, M).
这适用于T = C,但不为T = d,因为这是一个双定向关系。
我是否按照递归方式正确思考或者如何以其他方式解决此问题?
您是否想要包含循环? – false