You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oz/Mozart表达式求值:如何为Eval函数新增变量与环境支持?

表达式求值函数修改方案

你只需要给函数新增环境参数、补充变量匹配分支,同时调整递归调用的传参逻辑即可,修改后的完整代码如下:

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

修改说明

  • 首先给Eval函数新增第二个入参Env,用来接收传入的环境记录
  • 新增var(A)的匹配分支,直接通过变量名原子A从环境记录中读取对应变量的取值
  • 加法、乘法的递归调用逻辑中,需要把当前环境Env作为第二个参数传入,保证子表达式中的变量可以正常查询取值

验证测试

调用你给出的示例:
{Eval add(var(a) mul(int(3) var(b))) env(a:5 b:5)}
计算逻辑为:a + (3 * b) = 5 + (3*5) = 20,和预期结果一致。

可选扩展

如果需要处理未定义变量的异常场景,可以给变量分支增加存在性校验:

[] var(A) then 
   if {HasFeature Env A} then Env.A
   else raise undefined_variable(A) end
end

内容的提问来源于stack exchange,提问作者Nhabbott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:06:03