【发布时间】:2019-04-01 20:14:25
【问题描述】:
我在“prolog”中使用“is_a(X, Y)”制作了一个基本上是“树”。看起来像这样:
is_tree('b', 'a').
is_tree('c', 'a').
is_tree('d', 'b').
is_tree('e', 'b').
is_tree('f', 'c').
is_tree('g', 'c').
a
b c
d e f g
现在我正在尝试查找所有叶节点,即d, e, f, g。
到目前为止,我已经成功地将write()'ing 从第一片叶子中取出,但我不明白我应该如何回到树上找到其他节点,以及我应该如何写我的closing clause 来查找值。
find_leaf(X, Y):-
\+is_tree(X, Y).
find_leaf(X, Y):-
is_tree(A, Y), !,
find_leaf(Y, A).
find_leaf(X, Y):-
is_tree(A, X),
write(Y),
find_leaf(Y, A).
我怎样才能“再次备份”以找到其他叶子?什么是正确的“结束语”?
【问题讨论】:
-
X和Y在这里做什么? -
好吧,我没有命名它们,但它们可以是任何东西。这只是我用来寻找叶子的东西。其中一个是无关紧要的,但我无法弄清楚如何做到这一点,所以我采用了更多变量,希望对我有所帮助。
-
但我认为这有点错误。通常,您定义谓词,其中变量具有特定的含义,然后您的目标是通过调用带有这些变量的谓词来实现谓词的“主体”,使其与该目的一致。
-
最初我认为这可以通过仅使用
root来解决,但是我仍然卡住了。 -
这里的
root是什么?