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.
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda (p q) p)))
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