SICP学习笔4--邱奇整数

来源:互联网 发布:fnis 超出数组界限 编辑:程序博客网 时间:2024/04/28 13:58

邱奇非负整数0的定义如下:

(define zero (lambda (f) (lambda (x) x)))

下面定义加一运算

(define (add-1 n)  (lambda (f) (lambda (x) (f ((n f) x)))))

问1:如何定义1, 2?(定义中不包含zero和add-1)

(add-1 zero) => ((lambda (n) (lambda (f) (lambda (x) (f ((n f) x))))) (lambda (f) (lambda (x) x)))             => (lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x))) f) x)))             => (lambda (f) (lambda (x) (f x))) (define one     (lambda (f)(lambda (x)    (f x))))

(add-1 one)=> ((lambda (n) (lambda (f)     (lambda (x) (f ((n f) x)))))    (lambda (f)(lambda (x)    (f x))))=> (lambda (f)(lambda (x)     (f ((lambda (f)  (lambda (x)      (f x))) f) x)))=> (lambda (f)(lambda (x)    (f (lambda (x) (f x)) x)))=> (lambda (f)(lambda (x) (f (f x))))(define two    (lambda (f)(lambda (x) (f (f x)))))

问2:如何定义加法

(define plus (m n)    (lambda (f)(lambda (x) ((m f) ((n f) x)))))

python 等价代码:

>>> def zero(): return lambda f: lambda x: x... >>> def one(): return lambda f: lambda x: f(x)... >>> def two(): return lambda f: lambda x: f(f(x))... >>> def addone(n): return lambda f: lambda x: f(n(f)(x))... >>> def plus(m,n): return lambda f: lambda x: m(f)((n(f)(x)))



0 0
原创粉丝点击