算术表达评估oz莫扎特

时间:2019-01-09 12:42:25

标签: arithmetic-expressions oz mozart

我有一个问题,我真的不知道如何在OZ中实现它: 假设您给出了一个由元组构造的树描述的算术表达式,如下所示:

  1. 整数由元组int(N)描述,其中N是整数。
  2. 通过元组add(X Y)描述加法,其中X和Y均为算术表达式。
  3. li用元组mul(X Y)描述乘法,其中X和Y均为算术表达式。

实现一个带有算术表达式并返回其值的函数Eval。

例如,add(int(1) mul(int(3) int(4)))是一个算术表达式,其求值返回 13

1 个答案:

答案 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或任何其他表达式将其展开。