根据维基百科的定义,我在教堂数字上定义了教堂数字零和其他一些标准功能,如下所示:
(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
也可以自己正常工作。