我在解决如何通过模式匹配来利用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),我只是无法弄清楚什么。 / p>
答案 0 :(得分: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,以验证代码是否正确。