1

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

  1. 整数- 由 tuple 描述int(N),其中N是整数。
  2. 加法- 由元组描述add(X Y),其中XY都是算术表达式。
  3. 乘法- 由元组描述mul(X Y),其中XY都是算术表达式。
  4. 变量- 由元组描述var(A),其中A一个原子给出变量名
  5. 环境- 由记录描述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
4

1 回答 1

1

您需要从环境中获取变量的值。这可以通过将 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

附带说明一下,这实际上是普通解释器运行编程脚本的方式。通过使用语句堆栈和环境来存储变量映射。

于 2021-10-22T20:34:23.163 回答