【发布时间】:2015-10-02 03:58:06
【问题描述】:
我根据维基百科的定义定义了教堂数字零和教堂数字的其他一些标准功能,如下所示:
(define n0 (λ (f x) x))
(define newtrue
(λ(m n) m))
(define newfalse
(λ(m n) n))
(define iszero
(λ(m) (m (λ(x) newfalse) newtrue)))
(define ifthenelse
(λ(a b c) (a b c)))
使用这些,我将递归循环编写为:
(((λ(r) (λ(n) (ifthenelse (iszero n) n ((r r) n))))
(λ(r) (λ(n) (ifthenelse (iszero n) n ((r r) n))))) n0)
现在对于上述参数n0,它应该返回n0,而不进入递归。但事实并非如此。为什么?
注意 1:此递归循环与普通数字和普通函数完美配合:
(((λ(r) (λ(n) (if (= 0 n) n ((r r) n))))
(λ(r) (λ(n) (if (= 0 n) n ((r r) n))))) 0)
这将返回0。
注意 2:函数 ifthenelse、iszero、newtrue、newfalse 也可以单独工作。
【问题讨论】:
标签: recursion scheme lambda-calculus church-encoding