SICP读书笔记 2.1
SICP CONCLUSION
讓我們舉起杯,祝福那些將他們的思想鑲嵌在重重括號之間的Lisp程序員 !
祝我能夠突破層層代碼,找到住在里計算機的神靈!
目錄
1. 構造過程抽象
2. 構造數據抽象
3. 模塊化、對象和狀態
4. 元語言抽象
5. 寄存器機器里的計算
Chapter 2
- 構造數據對象
練習答案
數據抽象引導
為什么程序需要復合數據?
- 與我們需要復合過程一樣:同樣是為了提升我們子設計程序時所位于的概念層次,提高設計的模塊性,增強語言的表達能力
數據抽象
- 將那些如何處理數據的部分和數據如何表示分離
怎么去屏蔽數據的表示細節,從而實現更通用的操作呢?
(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)))什么是數據?
組成復合數據的關鍵思想
在進行過程抽象時,我們隱藏了具體過程的實現細節,這個特定過程完全可以由另一個具有同樣整體行為的過程取代,換句話說,我們可以這樣造成一個抽象,它將這一過程的使用方式,與該過程究竟如何通過更基本的過程實現的具體細節分離
而數據抽象也同理,也是屏蔽了具體實現和操作它分離,提供的抽象屏障應該是一組選擇函數和構造函數
1.1 實例:有理數的算術運算
按愿望思維,假設我們已經有了一組有理數的選擇函數和構造函數
(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))))有理數的表示
接下來就應該是具體實現有理數的表示,而Scheme給我們提供構造復合數據的工具則是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 抽象屏障
有關這個有理數實例的抽象層次,先是有理數的具體實現,到它的選擇和構造函數,有理數的操作方法,到使用有理數的程序
把程序各個部分分成不同部分,并且把依賴性限制到少數的幾個抽象屏障中,易維護,易修改,且靈活
1.3 數據意味著什么?
如果說是它由給定的選擇函數和構造函數實現的東西,那么顯然是不夠的
書上給出一種解釋,我們總可以把數據定義為一組適當的選擇函數和構造函數,以及為這些過程是合法表示所需要滿足的特特定條件
如果說這就是數據,那么是不是可以說在程序設計中處處都是數據呢?比如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))這小節的練習里主要還是鍛煉數據抽象和完善它的能力
這一節里主要講的還是怎樣通過給出一組選擇函數和構造函數去構建數據抽象,并且通過一層一層的抽象屏障,把程序的各個部分的依賴性降到最低,或許就是低耦合吧。再接著比較打破觀念的就是數據究竟是什么?書上給出一種解釋,我們總可以把數據定義為一組適當的選擇函數和構造函數,以及為這些過程是合法表示所需要滿足的特特定條件
轉載于:https://www.cnblogs.com/secoding/p/10520830.html
總結
以上是生活随笔為你收集整理的SICP读书笔记 2.1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最完整的PS快捷键大全(绝对经典)
- 下一篇: android自制拨号器