首页 > 解决方案 > 算术表达式评估 oz mozart

问题描述

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

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

实现一个函数 Eval,它接受一个算术表达式并返回它的值。

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

标签: arithmetic-expressionsozmozart

解决方案


到目前为止您没有展示您的尝试,这有点令人遗憾。

反正。通常,在处理此类问题时,您会考虑递归。模式匹配是分析表达式的好方法。

例如,如果您能够进行评估,那么如何使用简单的递归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现在您可以使用或任何其他表达式来扩展它。


推荐阅读