1exercise 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.23
(define (cons x y)
4(lambda (m) (m x y)))56
(define (car z)
7(z (lambda (p q) p)))
89 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型別嗎?是一種操作嗎?都是,也都不是,這已經超出了我以前的認知。
詞不達意,記錄一下,希望我以後回頭看的時候依然能理解,如果對偶然看到的人有幫助,那就太好了。
SICP練習 45 練習2 4
練習2.4 直接運用對比的技巧就可以猜測出相應的cdr表示如下 define cdr z z lambda p q q 但我們還是要按照題中要求用代換模型來檢驗。先來檢驗car的。car cons 0 1 car lambda m 0 1 lambda z z lambda p q p lambda...
SICP練習 45 練習2 4
練習2.4 直接運用對比的技巧就可以猜測出相應的cdr表示如下 define cdr z z lambda p q q 但我們還是要按照題中要求用代換模型來檢驗。先來檢驗car的。car cons 0 1 car lambda m 0 1 lambda z z lambda p q p lambda...
課後習題3 1
一.a.最小生成樹演算法 b.揹包問題 二.a.pow a,n 的蠻力演算法,t n n 如果用n的二進位制位數表示d表示,t n pow 2,d b.計算 pow a,n mod m 的時候,可以在計算一次乘法的同時就進行一次模的運算。這樣就可以保證不會越界。三.習題2.3 4.5.6的演算法 都...