《電腦程式的構造與解釋》(五)

2021-06-22 05:50:57 字數 1564 閱讀 3099

抽象的資料是由基本資料型別組合而成。這顯然需要程式語言提供「粘合劑」,使得能夠方便的構造抽象資料。

是包含兩個元素的復合資料物件。這個元素既可以是基本元素如數字、字母,也可以是另乙個序對。scheme語言中基本過程cons取兩個引數,返回乙個包含這兩個引數作為其成分的復合資料物件;如果給了乙個序對,可以通過基本過程car和cdr取出各個部分:

;cons car and cdr

(define x (cons 1 2))

(car x) ;return 1

(cdr x) ;return 2

還可以通過cons引數為序對去構造序對的序對:
;序對作為cons的引數

(define x (cons 1 2))

(define y (cons 3 4))

(define z (cons x y))

(car (car z)) ;return 1

(cdr (cdr z)) ;return 3

通過基本過程cons、car和cdr實現復合資料。由序對構造的資料物件稱為表結構(list)資料。

有理數不是基本資料型別,它包含兩部分,分別是分子和分母。假設通過有理數的構造和選擇函式,可以將兩個整數構造成乙個有理數,和從有理數中分別選擇分子和分母。就是make-rat、numer和denom。

現在假設有兩個有理數分別為x、y,要實現有理數加法add-rat,n1、d1是x的分子和分母,n2、d2是y的分子和分母,根據前面的假設可以通過numer和denom分別獲取x、y的分子和分母。根據有理數的加法規則得到有理數和:n1/d1 + n2/d2 = (n1*d2 + n2*d2)/d1*d2。因此可以定義:

;有理數求和

(define (add-rat x y)

(make-rat (+ (* (numer x) (denom y)

(* (numer y) (denom x)

(* (denom x) (denom y))))

同樣可以給予make-rat、numer和denom和基本算術運算規則可以實現更多的有理數運算如:sub-rat、mul-rat、div-rat、equal-rat等等。

一般而言,資料抽象的基本思想就是為每一類資料物件標識出一組操作,使得對這類資料物件的操作都可以基於他們表述,而且在操作這些資料物件時也只使用它們。

下圖表明有理數系統的結構:其中水平線表示抽象屏障,它們隔離了系統中的不同層次。在每一層資料抽象的使用與實現相分離。

物件導向程式設計就是要構造各種資料型別,然後將對這個型別的某些方法給其他物件呼叫,如同有理數操作的add-rat、sub-rat。通過建立物件,然後給該物件傳送訊息,實現物件之間的呼叫。物件導向程式設計的本質就是資料抽象,暴露出來的介面作為抽象層,其實現細節對資料的使用程式而言是遮蔽的。至於繼承和多型,只能算是物件導向程式設計的小技巧,給程式設計師帶來些便利性,同時也帶來很多麻煩和負擔。

《電腦程式的構造與解釋》(七)

define square list ls cond null?ls null else cons car ls car ls square list cdr ls square list是以ls為引數,計算每個元素的平方,然後再構成list並返回。如果需要對list作其他操作,比如開方 加一等呢?...

電腦程式的構造和解釋 SICP

又名 structure and interpretation of computer programs,second edition 譯者 裘宗燕 isbn 9787111135104 頁數 473 定價 45.0 出版社 機械工業出版社 裝幀 平裝 出版年 2004 2 1 本書1984年出版,...

電腦程式的構造與解釋作業 練習1 16到1 19

1.16 這個題目就是直譯一下題目裡面的公式。看開始我看了一下前面的題目,就高高興興的寫出來了。如下 define even?n remainder n 2 0 define fast expt b n cond n 0 1 even?n fast expt b b n 2 else b fast ...