0

我在思考如何利用 Oz 中的记录元素进行模式匹配时遇到了一些麻烦。下面是我的代码

declare
fun {Eval X E}
case X
of int(N) then N
   [] var(X) then E.X
   [] mul(X Y) then X*Y
   [] add(X Y) then X+Y
   end
   end
end

{Eval add(var(a) mul(int(3) var(b))) env(a:2 b:4)}

这是我必须使用的输入,var(a) 应该从输入中的 env 记录返回 2,(并且 var(b) 返回 4),我只是无法弄清楚任何事情。

4

1 回答 1

0

在您的代码中,当您没有达到数字或 var 时,您需要递归调用 Eval。试试这个:

declare
fun {Eval Node Env}
   if {IsNumber Node} then Node
   else
      case Node
      of var(X) then Env.X
      [] mul(X Y) then {Eval X Env} * {Eval Y Env}
      [] add(X Y) then {Eval X Env} + {Eval Y Env}
      end
   end
end

此外,Oz 要求将函数的返回值绑定到变量,因此请尝试以下操作:

declare
Ans = {Eval add(var(a) mul(3 var(b))) env(a:2 b:4)}

然后您可以使用浏览器查看 Ans 以验证代码是否正确。

于 2018-07-21T00:06:59.410 回答