2

問題があり、OZ でそれを実装する方法がよくわかりません: 次のように、タプルから構築されたツリーによって記述される算術式が与えられたとします。

  1. 整数は、タプル int(N) によって記述されます。ここで、N は整数です。
  2. 加算は、X と Y の両方が算術式であるタプル add(XY) によって記述されます。
  3. 乗算は、タプル mul(XY) によって記述されます。ここで、X と Y は両方とも算術式です。

算術式を取り、その値を返す関数 Eval を実装します。

たとえば、add(int(1) mul(int(3) int(4)))は算術式で、その評価は13を返します。

4

1 に答える 1

0

これまでの努力を見せられなかったのは少し残念です。

ともかく。通常、このような問題を扱うときは、再帰の観点から考えます。パターン マッチングは、式を分析するための優れた方法です。

たとえば、評価できる場合、単純な再帰で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これで、または他の式で展開できます。

于 2019-01-14T08:33:57.173 に答える