表达式求值Oz/Mozart



我正在尝试创建一个函数,该函数需要一个表达式并对其进行评估。表达式可以包含以下操作:

整数
  1. -用元组int(N)描述,其中N是一个整数。
  2. 添加-用元组add(X Y)描述,其中XY都是算术表达式。
  3. 乘法
  4. -由元组mul(X Y)描述,其中XY都是算数的表达式。
  5. <
  6. 变量/strong>-由元组var(A)描述,其中A是一个原子,给出变量名
  7. 环境
  8. -由记录env(a:5 b:5)描述,其中ab是值为5的变量。

例如:{Eval add(var(a) mul(int(3) var(b))) env(a:5 b:5)}。结果应该是20

到目前为止,我已经实现了整数、加法和乘法。但是我真的不确定从哪里开始变量和环境。

我的当前代码:

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

您需要从环境中获取变量的值。这可以通过将env()作为参数传递给Eval函数来实现,以便从内部访问它。

我已经为你解出来了。它应该很容易理解。

fun {Eval Statements Env}
case Statements 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(X) then Env.X
end
end

作为旁注,这实际上是普通解释器运行编程脚本的方式。通过使用语句栈和环境来存储变量映射。

最新更新