SICP读书笔记 2.1
SICP CONCLUSION
讓我們舉起杯,祝福那些將他們的思想鑲嵌在重重括號(hào)之間的Lisp程序員 !
祝我能夠突破層層代碼,找到住在里計(jì)算機(jī)的神靈!
目錄
1. 構(gòu)造過程抽象
2. 構(gòu)造數(shù)據(jù)抽象
3. 模塊化、對(duì)象和狀態(tài)
4. 元語言抽象
5. 寄存器機(jī)器里的計(jì)算
Chapter 2
- 構(gòu)造數(shù)據(jù)對(duì)象
練習(xí)答案
數(shù)據(jù)抽象引導(dǎo)
為什么程序需要復(fù)合數(shù)據(jù)?
- 與我們需要復(fù)合過程一樣:同樣是為了提升我們子設(shè)計(jì)程序時(shí)所位于的概念層次,提高設(shè)計(jì)的模塊性,增強(qiáng)語言的表達(dá)能力
數(shù)據(jù)抽象
- 將那些如何處理數(shù)據(jù)的部分和數(shù)據(jù)如何表示分離
怎么去屏蔽數(shù)據(jù)的表示細(xì)節(jié),從而實(shí)現(xiàn)更通用的操作呢?
(define (linear-combination a b x y)(+ (* a x) (* b y)))(define (linear-combination a b x y)(add (mul a x) (mul b y)))什么是數(shù)據(jù)?
組成復(fù)合數(shù)據(jù)的關(guān)鍵思想
在進(jìn)行過程抽象時(shí),我們隱藏了具體過程的實(shí)現(xiàn)細(xì)節(jié),這個(gè)特定過程完全可以由另一個(gè)具有同樣整體行為的過程取代,換句話說,我們可以這樣造成一個(gè)抽象,它將這一過程的使用方式,與該過程究竟如何通過更基本的過程實(shí)現(xiàn)的具體細(xì)節(jié)分離
而數(shù)據(jù)抽象也同理,也是屏蔽了具體實(shí)現(xiàn)和操作它分離,提供的抽象屏障應(yīng)該是一組選擇函數(shù)和構(gòu)造函數(shù)
1.1 實(shí)例:有理數(shù)的算術(shù)運(yùn)算
按愿望思維,假設(shè)我們已經(jīng)有了一組有理數(shù)的選擇函數(shù)和構(gòu)造函數(shù)
(define (add-rat x y)(make-rat (+ (* (numer x) (denom y))(* (numer y) (denom x)))(* (denom x) (denom y))))(define (sub-rat x y)(make-rat (- (* (numer x) (denom y))(* (numer y) (denom x)))(* (denom x) (denom y))))(define (mul-rat x y)(make-rat (* (numer x) (numer y))(* (denom x) (denom y))))(define (div-rat x y)(make-rat (* (numer x) (denom y))(* (denom x) (numer y))))(define (equal-rat? x y)(= (* (numer x) (denom y))(* (numer y) (denom x))))有理數(shù)的表示
接下來就應(yīng)該是具體實(shí)現(xiàn)有理數(shù)的表示,而Scheme給我們提供構(gòu)造復(fù)合數(shù)據(jù)的工具則是cons
(define (make-rat n d) (cons n d))(define (numer x) (car x))(define (denom x) (cdr x));;footnote -- alternative definitions (define make-rat cons) (define numer car) (define denom cdr)(define (print-rat x)(newline)(display (numer x))(display "/")(display (denom x)))1.2 抽象屏障
有關(guān)這個(gè)有理數(shù)實(shí)例的抽象層次,先是有理數(shù)的具體實(shí)現(xiàn),到它的選擇和構(gòu)造函數(shù),有理數(shù)的操作方法,到使用有理數(shù)的程序
把程序各個(gè)部分分成不同部分,并且把依賴性限制到少數(shù)的幾個(gè)抽象屏障中,易維護(hù),易修改,且靈活
1.3 數(shù)據(jù)意味著什么?
如果說是它由給定的選擇函數(shù)和構(gòu)造函數(shù)實(shí)現(xiàn)的東西,那么顯然是不夠的
書上給出一種解釋,我們總可以把數(shù)據(jù)定義為一組適當(dāng)?shù)倪x擇函數(shù)和構(gòu)造函數(shù),以及為這些過程是合法表示所需要滿足的特特定條件
如果說這就是數(shù)據(jù),那么是不是可以說在程序設(shè)計(jì)中處處都是數(shù)據(jù)呢?比如cons也是?
(define (cons x y)(define (dispatch m)(cond ((= m 0) x)((= m 1) y)(else (error "Argument not 0 or 1 -- CONS" m))))dispatch)(define (car z) (z 0))(define (cdr z) (z 1))這小節(jié)的練習(xí)里主要還是鍛煉數(shù)據(jù)抽象和完善它的能力
這一節(jié)里主要講的還是怎樣通過給出一組選擇函數(shù)和構(gòu)造函數(shù)去構(gòu)建數(shù)據(jù)抽象,并且通過一層一層的抽象屏障,把程序的各個(gè)部分的依賴性降到最低,或許就是低耦合吧。再接著比較打破觀念的就是數(shù)據(jù)究竟是什么?書上給出一種解釋,我們總可以把數(shù)據(jù)定義為一組適當(dāng)?shù)倪x擇函數(shù)和構(gòu)造函數(shù),以及為這些過程是合法表示所需要滿足的特特定條件
轉(zhuǎn)載于:https://www.cnblogs.com/secoding/p/10520830.html
總結(jié)
以上是生活随笔為你收集整理的SICP读书笔记 2.1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最完整的PS快捷键大全(绝对经典)
- 下一篇: android自制拨号器