试图理解Scheme中的教会编码

时间:2014-10-29 16:21:08

标签: scheme lambda-calculus church-encoding

我试图通过Scheme来理解教会编码的整个原则。我认为我理解它的基础知识,例如

  • 教会数字为0

    (定义c-0 (lambda(f) (lambda(x) X)))

  • 教会数字为1

    (定义c-1 (lambda(f) (lambda(x) (f x))))

...并继续将该函数应用于x次N次。

现在我的问题是这一切意味着什么?如果我以教堂3为例:

(define c-3
  (lambda (x)
    (lambda (f)
      (f (f (f x))))))

这实际上是做什么的?我也只有基本的计划知识,但我甚至不懂如何使用这个功能?什么是使用c-3函数的示例输入?它只是像循环那样应用3次?

1 个答案:

答案 0 :(得分:1)

你是对的。在这种情况下,c-3是一个函数,它接受1个参数。并返回另一个函数。 该另一个函数采用1参数函数,并将其应用于第一个参数。

在这个例子中,我用参数3调用c-3,这将返回一个函数。 然后,我将这个函数,另一个函数,add1添加到x。

((c-3 3) (lambda (x) (add1 x)))
6

如您所见,这将产生6。它适用于add1到3次,3次。我知道这很令人困惑。但是你可以 手动替换函数体中的参数以更好地理解它。无论您在哪里看到f,只需将其替换为(lambda (x) (add1 x))并将x替换为3(或任何数字)。

只要参数的类型正确,这将适用于任何1个参数函数。