SICP课后习题2.4理解

1 Exercise 2.4.  Here is an alternative procedural representation of pairs. For this representation, verify that (car (cons x y)) yields x for any objects x and y.
2 
3 (define (cons x y)
4   (lambda (m) (m x y)))
5 
6 (define (car z)
7   (z (lambda (p q) p)))
8 
9 What is the corresponding definition of cdr? (Hint: To verify that this works, make use of the substitution model of section 1.1.5.) 

 

想了很久都没想明白。今天早上一看,发现自己绕在哪里了。

cons(x y)的实现是一个lambda表达式,本质上cons(x y)是一种m操作。m是一种操作没错,但是并没有实际定义m是怎么样一种操作,不妨看作是一种操作类型的形参。

z是cons(x y) 参数m=(lambda(p q)p),这里面具体指定了m实际上是怎么样一种操作:这种操作传入一个pair,然后返回这个pair的第一个元素。

 

讲真,这一小节真是惊到我了,对于抽象来说,数据和程序的界限都已经不存在了。我被困住的地方是(car z)中的z到底是什么呢,是pair类型吗?是一种操作吗?都是,也都不是,这已经超出了我以前的认知。

 

词不达意,记录一下,希望我以后回头看的时候依然能理解,如果对偶然看到的人有帮助,那就太好了。

 

 

附上MIT SICP 书html地址:https://mitpress.mit.edu/sicp/full-text/book/book.html

posted @ 2018-03-05 09:20  kpliu  阅读(175)  评论(0编辑  收藏  举报