Church Counter(邱奇计数)
(define zero (lambda (f) (lambda (x) x))) (define (add-1 n) (lambda (f) (lambda (x) (f ((n f) x)))))
我们把zero带入add-1
(lambda (f) (lambda (x) (f ((lambda (f) (lambda (x) x)) f) x))) => (lambda (f) (lambda (x) (f ((lambda (x) x) x)))) => (lambda (f) (lambda (x) (f x)))
这个时候我们可以和zero比较,就会发现里面多了一次f操作,这就是计数操作
one, two可以写为
(define one (lambda (f) (lambda (x) (f x)))) (define two (lambda (f) (lambda (x) (f (f x)))))
(add m n)可以写为
(define (add m n) (lambda (f) (lambda (x) ((m f) ((n f) x)))))
下面摘自 《程序员的呐喊》
在最遥远的国度,比函数式王国更远的地方,有一种传说中的地带叫做lambda the ultimate。相传那个地方根本没有名词,只有动词。虽然那里有东西,但它们皆由动词创造,若传闻不虚,那地方连睡觉前数羊用的数字也不例外,而羊是当地最流行的货币。数字0就是lambda(), 1则是lambda(lambda()), 2则是lambda(lambda(lambda()), 以此类推。在这个传奇国度,每样东西不管是名词动词还是其他什么,都是由lambda这个初始动词开始构建出来的。