我正在尝试创建一个函数,该函数接受表达式并对其进行计算。表达式可以包含以下操作:
int(N)描述,其中N是integer.add(X Y)描述,其中X和Y都是算术expressions.mul(X Y)描述,X和Y都是算术expressions.var(A)描述,其中A是给变量A环境的原子--由记录env(a:5 b:5)描述,其中a和b是值为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发布于 2021-10-22 20:34:23
您需要从环境中获取变量的值。这可以通过将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顺便提一句,这实际上是普通解释器运行编程脚本的方式。通过使用语句堆栈和环境来存储变量映射。
https://stackoverflow.com/questions/69607378
复制相似问题