ウィキペディアの定義に従って、教会の数字のゼロと教会の数字に関するその他の標準関数を次のように定義しました。
(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
も単独で正常に動作します。