模式匹配的记录在奥兹



我在思考如何利用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(,我只是无法计算出任何结果。

在您的代码中,每当您还没有达到数字或变量时,您需要递归地调用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,以验证代码是否正确。

最新更新