表达式评估 Oz/Mozart
Expression Evaluation Oz/Mozart
我正在尝试创建一个接受表达式并对其求值的函数。表达式可以包含以下操作:
- 整数 - 由元组描述
int(N)
,其中 N
是一个整数。
- 加法 - 由元组
add(X Y)
描述,其中X
和Y
都是算术表达式。
- 乘法 - 由元组
mul(X Y)
描述,其中X
和Y
都是算术
表达式。
- 变量 - 由元组
var(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
您需要从环境中获取变量的值。这可以通过将 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
附带说明一下,这实际上是常见解释器运行编程脚本的方式。通过使用语句堆栈和环境来存储变量映射。
我正在尝试创建一个接受表达式并对其求值的函数。表达式可以包含以下操作:
- 整数 - 由元组描述
int(N)
,其中N
是一个整数。 - 加法 - 由元组
add(X Y)
描述,其中X
和Y
都是算术表达式。 - 乘法 - 由元组
mul(X Y)
描述,其中X
和Y
都是算术 表达式。 - 变量 - 由元组
var(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
您需要从环境中获取变量的值。这可以通过将 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
附带说明一下,这实际上是常见解释器运行编程脚本的方式。通过使用语句堆栈和环境来存储变量映射。