【发布时间】:2011-04-24 03:55:47
【问题描述】:
我正在通过 SICP 工作,problem 2.6 让我陷入了困境。在处理 Church 数字时,将零和 1 编码为满足某些公理的任意函数的概念似乎是有意义的。此外,使用零的定义和 add-1 函数推导出单个数字的直接公式是有意义的。我不明白加号运算符是如何形成的。
到目前为止,我有这个。
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
(define one (lambda (f) (lambda (x) (f x))))
(define two (lambda (f) (lambda (x) (f (f x)))))
查看lambda calculus 的维基百科条目,我发现加号的定义是 PLUS := λmnfx.m f (n f x)。使用该定义,我能够制定以下程序。
(define (plus n m)
(lambda (f) (lambda (x) ((m f) ((n f) x)))))
我不明白的是,如何仅使用先前派生过程提供的信息直接派生该过程。谁能以某种严格的类似证明的形式回答这个问题?直觉上,我想我明白发生了什么,但正如理查德·费曼曾经说过的,“如果我不能建造它,我就无法理解它......”
【问题讨论】:
-
我理解设计图灵机来计算“两个数字相加”。事实上,有很多很好的视频短片来解释这一点——但是我发现 Lambda 微积分模型很难理解。有什么好的建议吗?
标签: scheme sicp lambda-calculus church-encoding