首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表达式评估Oz/Mozart

表达式评估Oz/Mozart
EN

Stack Overflow用户
提问于 2021-10-17 18:22:39
回答 1查看 106关注 0票数 1

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

  1. Integers --由元组int(N)描述,其中N是integer.
  2. Addition --由元组add(X Y)描述,其中XY都是算术expressions.
  3. Multiplication --由元组mul(X Y)描述,XY都是算术expressions.
  4. Variables --由元组var(A)描述,其中A是给变量A环境的原子--由记录env(a:5 b:5)描述,其中ab是值为5.

的变量。

例如:{Eval add(var(a) mul(int(3) var(b))) env(a:5 b:5)}。它应该被评估为20

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

我现在的代码是:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-22 20:34:23

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

我已经帮你解决了。这应该很容易理解。

代码语言:javascript
复制
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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69607378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档