【发布时间】:2018-11-20 18:09:04
【问题描述】:
我是一个非常 Prolog 的初学者,所以这个问题可能会变得毫无用处,反正我已经定义了一个 Prolog 树如下:
type([null, tree(T, tree(T), tree(T))]:tree(T)).
这意味着一棵树要么为空,要么具有左子树和右子树。
然后我定义了一个谓词,它应该输出该树的最小节点值,即:
pred(min(tree(T), integer)).
%% (++ --)
pred(calc_min(integer, integer, integer, integer)).
%% (++, ++, ++, --)
min(tree(Root, null, null), Root).
min(tree(Root, Left, Right), Result):-
min(Left, LeftRes),
min(Right, RightRes),
calc_min(Root, LeftRes, RightRes, Result).
我想我必须定义树是空树的基本子句,但我不知道要输出什么。
【问题讨论】:
-
"但我不知道要输出什么。" - 我们也不知道您的代码应该做什么。你希望空树的最小值是多少?
-
感兴趣的:Prolog 中的 RosettaCode TreeTraversal
-
一棵空(null)树没有最小值,因为它没有值。您的基本案例应该是具有最小值的最简单的树。此外,检查递归
min/2子句中的逻辑。计算完左右最小值后,结果树的最小值应该是多少?提示:这不是一个大计算。您正在考虑 3 个值:根值、左值和右值。
标签: prolog