我目前正在尝试构建一个lambda微积分求解器,并且在构建AST时遇到了一些小问题。甲演算术语感应定义为:Haskell AST与递归类型
1)一种可变
2)的λ,变量,一个点,一个lambda表达式。
3)括号,lambda表达式,lambda表达式和括号。
我想怎么做(在第一次尝试)是这样的:
data Expr =
Variable
| Abstract Variable Expr
| Application Expr Expr
现在很明显这是行不通的,因为变量是不是一个类型的,和抽象变Expr的期望类型。所以,我的哈克解决方案,这是有:
type Variable = String
data Expr =
Atomic Variable
| Abstract Variable Expr
| Application Expr Expr
现在,这实在是烦人,因为我不喜欢自己的原子变量,但摘要采取字符串,而不是EXPR。有什么办法可以让这个更优雅,并且像第一个解决方案那样做?
您发现令人厌恶的第二个定义是执行此操作的标准方法。我的建议是,习惯它。你的思维方式与Haskell的类型系统不兼容,所以请继续并训练自己。 – luqui