SICP 習題 (2.12)解題總結 :區間的不同實現方式,sicp2.12

來源:互聯網
上載者:User

SICP 習題 (2.12)解題總結 :區間的不同實現方式,sicp2.12

SICP 習題 2.12 要求我們定義一個建構函式make-center-percent,它接收兩個參數,分別代表中心點和一個誤差百分比。我們需要通過這個建構函式產生一個區間。此外還需要定義一個選擇函數percent,用來擷取指定區間的誤差百分比。還有就是需要實現一個center函數用於擷取區間的中間點。


這裡的關鍵就是要我們明白一個複合資料型別可能會有不同的表現形式,比如這裡的區間可以用起點和終點表示,也可以使用中心點和誤差表示。


從內部實現來講,可以簡單的將兩種表現形式相關的資料都儲存起來,比如我們同時記錄區間的起點、終點、中心點和誤差。但是這樣我們就需要在資料更新時同時兩種資料,比如我們獲得了新的起點和終點資料,那我們就必須同時更新起點,終點,中心點和誤差這些資料,而新的中心點和誤差可以根據新的起點和終點計算出來。


既然都是需要轉換,另一中實現思路就是只保留一種形式的資料,當獲得另一種形式的資料時通過計算轉換成第一種資料。


所以,在這裡我們就依然採用之前的起點和終點的區間資料儲存形式,當我們通過make-center-percent構建區間時就通過計算把中心點和誤差百分比轉換成起點和終點。


代碼如下:

(define (make-center-percent center percent)  (make-interval (- center (* center (/ percent 100))) (+ center (* center (/ percent 100)))))


這樣,擷取中心點的代碼和書中就是一樣的了,通過起點和終點相加再除於2可以得到:

(define (center i)  (/ (+ (lower-bound i) (upper-bound i)) 2))

當我們知道一個區間的起點和終點,就可以通過計算寬度再得出誤差位移量,再把位移量除於中心點就可以得出誤差相對於中心點的百分比了。這裡要注意的時書中對區間寬度的定義是起點到終點距離的一半,所以這裡的區間寬度恰好是它的誤差位移量。計算誤差百分比的代碼如下:

(define (percent i)  (* 100 (abs  (/ (interval-width i) (center i)))))

這樣就完成了習題2.12。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.