SICP课后习题2.4理解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值