我正在研究 Haskell lambda 演算解释器。我有一种方法可以将表达减少到正常形式。
type Var = String
data Term =
Variable Var
| Lambda Var Term
| Apply Term Term
deriving Show
normal :: Term -> Term
normal (Variable index) = Variable index
normal (Lambda var body) = Lambda var (normal body)
normal (Apply left right) = case normal left of
Lambda var body -> normal (substitute var (normal right) body)
otherwise -> Apply (normal left) (normal right)
Run Code Online (Sandbox Code Playgroud)
如何将所采取的步骤保存到集合中?
我的正常函数输出这个:
\a. \b. a (a (a (a b)))
我的目标是让所有步骤如下:
(\f. …Run Code Online (Sandbox Code Playgroud)