天天看点

SICP学习笔3--lambda

(define (my_cons x y)           ......(1)  
   (lambda (m) (m x y)))
(define (my_car z)              ......(2)
   (z (lambda (p q) p)))
(define (my_cdr z)
   (z (lambda (p q) q)))
           
> (my_car   (my_cons 1 2))     .......(3)
1
           

理解:

根据(2)将(3)my_car展开,我们得到

> ((my_cons 1 2) (lambda (p q) p))  ...... (4)
1
           

(1)式定义了一个函数,这个函数的参数m是一个函数,返回x, y将作为m的参数,调用m运行。

(2)式定义了一个函数,这个函数调用函数z,并以一个lamdba函数作为z的参数

根据(1)将(4)my_cons展开,我们得到

> ((lambda (m) (m 1 2 )) (lambda (p q) p) )  ......(5)
1
           

python的等价代码:

>>> def my_cons(x,y): return lambda m: m(x,y)
... 
>>> def my_car(z): return z(lambda p,q: p)
... 
>>> my_car(my_cons(1,2))