data Exp
= Let String Exp Exp
| Exp1 Exp1
deriving Show
文档页面示例中的 Let 关键字是什么意思?(我知道let的正常含义)
这不是关键字。它只是该Exp
类型的第一个构造函数的名称。Exp1
第二行的第一个是第二个构造函数的名称。
在这种情况下Let
是一个数据构造函数,不应与let
关键字混淆。
在示例中,语法接受let
类似于 Haskell 使用的表达式。
即字符串let foo = 5 in foo + foo
稍后将表示为:
Let "foo" (Term (Factor (Int 5))) (Plus (Term (Factor (Var "foo"))) (Factor (Var "foo")))
如您所见,构造函数的第一个参数是 substition,第二个参数是 substition 适用的表达式。