因此,我们的教授向我们提供了此代码和有关此问题的两个问题。我根本不知道从哪里开始,因为我不理解所提供的任何代码,因此仅了解所有这些行的内容是一个好的开始。
我知道data
是声明数据类型,而|
充当Or。
但是对于其他所有内容,例如Lambda String Exp
,
是String
还是匿名函数?Exp
是预定义的值吗?
VLambda
和VVar
应该是什么?
每行的解释都很棒。
谢谢您的时间:)
以下是一些Haskell代码,可作为功能性迷你语言的解释器:
-- The expressions
data Exp = Var String
| Lambda String Exp
| App Exp Exp
-- The values returned by the interpreter
data Value = VVar String
| VLambda String Exp
type Env = [(String, Value)]
-- The interpreter
eval :: Env -> Exp -> Value
eval env e = ...
所引用的范围是动态或静态(词法)范围
答案 0 :(得分:3)
这里有很多问题,每条帖子问一个特定问题时,StackOverflow效果更好。无论如何,这是一个开始:
Lambda String Exp
,是字符串还是匿名函数
这是一个非特殊名称“ Lambda”的值,其中包含一个String
和一个Exp
。相当于这个Java类:
class Lambda extends Exp {
String variable;
Exp expression;
}
它以解释语言表示匿名函数表达式。
Exp
是预定义的值吗?
否,它是在您的代码段data Exp = ...
VLambda和VVar应该是什么?
解释器对表达式和结果值使用不同的类型,因此Lambda
表达式将求值为VLambda
值,而Var
表达式将求值为{{1} }或Value
(如果免费)(可能是免费的)。在获得VVar
App
表达式进行求值。
eval函数将使用哪个作用域?
Value
函数将使用动态范围评估语言。您可以知道,因为VLambda没有可以存储闭包的Env字段。
为了允许其他范围,我们必须更改什么?
您需要在VLambda中添加一个Env字段,该字段将在评估Lambda时存储词法变量的闭包。