church计数

正如书中写的一样(“还不足以令人如雷灌顶是吧?!!”),看到完全没有数实现加一和0的定义,着实吓了一跳。
当然了,既然你不走寻常路,那我也不能在一棵树上吊死,你说不用数字,那至少得体现数的概念吧?多少个苹果是数,函数迭代多少次也是数(哈哈,其实是从书上的代码看出点端倪,然后顺藤摸瓜推出来的)。
嗯哼,揭晓答案:这里的数n对应的是f迭代n次,如果n是0,n对应的就是自变量。

(define zero (lambda (f) (lambda (x) x)))
(define one (lambda (f) (lambda (x) (f x))))
(define two (lambda (f) (lambda (x) (f (f x)))))
(define (add-1 n) (lambda (f) (lambda (x) (f ((n f) x)))))
(define (my+ a b)
  (lambda (f) (lambda (x) ((a f) ((b f) x)))))
(define (f x) (+ 1 x))
((zero f) 0)
((one f) 0)
((two f) 0)
(((my+ one two) f) 0)

你可能感兴趣的:(lisp,函数,迭代,scheme-sicp)