Haskell 迷你口译员
Haskell Mini-Interpreter
所以我们的教授向我们展示了这段代码和两个关于它的问题。我什至不知道从哪里开始,因为我不理解所提供的任何代码,所以了解所有这些行在做什么是一个好的开始。
我知道 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 = ...
- 函数 eval 将使用哪个范围?
- 我们必须更改什么才能允许其他范围?
引用的范围是动态或静态(词法)范围
这里有很多问题,当您针对每个 post 提出一个具体问题时,Whosebug 的效果会更好。无论如何,这是一个开始:
Lambda String Exp
, is it a String or an anonymous function
这是一个具有 non-special 名称 "Lambda" 的值,其中包含一个 String
和一个 Exp
。相当于这个 Java class:
class Lambda extends Exp {
String variable;
Exp expression;
}
表示解释型语言中的匿名函数表达式。
is Exp
a pre-defined value?
不,它是在您的代码段中定义的,data Exp = ...
What are the VLambda and the VVar supposed to be?
解释器对表达式和结果值使用不同的类型,因此 Lambda
表达式将计算为 VLambda
值,而 Var
表达式将计算为 Value
来自环境或 VVar
如果它是免费的(大概)。将评估 App
表达式,直到获得 Value
Which scope will be used by the function eval?
eval
函数将评估具有动态范围的语言。您可以看出,因为 VLambda 没有可以存储闭包的 Env 字段。
What do we have to change to allow for the other scope?
您将向 VLambda 添加一个 Env 字段,该字段将在评估 Lambda 时存储词法变量的闭包。
所以我们的教授向我们展示了这段代码和两个关于它的问题。我什至不知道从哪里开始,因为我不理解所提供的任何代码,所以了解所有这些行在做什么是一个好的开始。
我知道 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 = ...
- 函数 eval 将使用哪个范围?
- 我们必须更改什么才能允许其他范围?
引用的范围是动态或静态(词法)范围
这里有很多问题,当您针对每个 post 提出一个具体问题时,Whosebug 的效果会更好。无论如何,这是一个开始:
Lambda String Exp
, is it a String or an anonymous function
这是一个具有 non-special 名称 "Lambda" 的值,其中包含一个 String
和一个 Exp
。相当于这个 Java class:
class Lambda extends Exp {
String variable;
Exp expression;
}
表示解释型语言中的匿名函数表达式。
is
Exp
a pre-defined value?
不,它是在您的代码段中定义的,data Exp = ...
What are the VLambda and the VVar supposed to be?
解释器对表达式和结果值使用不同的类型,因此 Lambda
表达式将计算为 VLambda
值,而 Var
表达式将计算为 Value
来自环境或 VVar
如果它是免费的(大概)。将评估 App
表达式,直到获得 Value
Which scope will be used by the function eval?
eval
函数将评估具有动态范围的语言。您可以看出,因为 VLambda 没有可以存储闭包的 Env 字段。
What do we have to change to allow for the other scope?
您将向 VLambda 添加一个 Env 字段,该字段将在评估 Lambda 时存储词法变量的闭包。