首页 > 解决方案 > 具有自定义类型的 Haskell Church 数字

问题描述

我正在尝试解决 Church 数字解析器我有一个自定义类型,可以区分变量、lambda 和应用程序

type Var = String

data Term =
    Variable Var
  | Lambda   Var  Term
  | Apply    Term Term
  deriving Show

我有一个名为church 我可以为不同的教堂手动定义案例的功能。所以让我们说:

等等。

我尝试按照以下方式递归调用教堂功能:

church :: Int -> Term
church 0 = Lambda "f" (Lambda "x" (Variable  "x"))
church i = Apply (church(i -1)) (Apply (Variable "f") (Variable "x"))

然而,这也不断重复部分Lambda "f" (Lambda "x"

我尝试过的另一种方法是

church :: Int -> Term
church 0 = Lambda "f" (Lambda "x" (Variable  "x"))
church i = Apply (church (i -1)) (Apply (Variable "f") (Variable "x"))

然而,这也会产生复制 lambda 的结果。我在这里错过了什么吗?我怎样才能只重复申请部分(Apply (Variable "f") (Variable "x"))

标签: haskelllambda-calculus

解决方案



推荐阅读