我有一个问题,我真的不知道如何在OZ中实现它: 假设您给出了一个由元组构造的树描述的算术表达式,如下所示:
实现一个带有算术表达式并返回其值的函数Eval。
例如,add(int(1) mul(int(3) int(4)))
是一个算术表达式,其求值返回 13 。
答案 0 :(得分:0)
到目前为止,您还没有表现出自己的尝试,这令人感到难过。
无论如何。通常,在处理此类问题时,您会考虑递归。 pattern matching是分析表达式的好方法。
例如,如果您有能力评估int(4)
,那么很明显如何通过简单的递归来评估add(int(4) int(4))
:
declare
proc {Eval Exp Res}
case Exp
of int(N) then Res = N
[] add(X Y) then
local R1 R2 in
{Eval X R1}
{Eval Y R2}
Res = R1 + R2
end
end
end
现在您可以使用mul
或任何其他表达式将其展开。