SICP練習 5 練習1 9

2022-04-11 04:02:25 字數 766 閱讀 9095



以下是第乙個加起兩個正整數的方法,其中

inc將引數加1,

dec將引數減1。

(define (+ a b)

(if(= a 0)

b(inc (+ (dec a) b))))

用代換模型展示

(+ 4 5)

如下:(+ 4 5)

(inc (+ 3 5))

(inc (inc (+ 2 5)))

(inc (inc (inc (+ 1 5))))

(inc (inc (inc (inc (+ 0 5)))))

(inc (inc (inc (inc 5))))

(inc (inc (inc 6)))

(inc (inc 7))

(inc 8)

9如上所示,在代換模型展示中包含了伸展和收縮兩個階段,並且伸展階段所需的額外儲存量和計算所需的步數都正比於引數

a。因此這是乙個線性遞迴過程。

以下是另乙個加起兩個正整數的方法。

(define (+ a b)

(if(= a 0)

b(+ (dec a) (inc b))))

同樣用代換模型展示

(+ 4 5)

如下:(+ 4 5)

(+ 3 6)

(+ 2 7)

(+ 1 8)

(+ 0 9)

9在這個過程中並沒有任何增長或者收縮,而其計算過程可用固定數目的狀態變數(

a)描述。這是乙個線性迭代過程。

SICP練習 7 練習1 11

這種題目太像是數學題目了,不過拿到程式設計上又有一些的難度。我們先根據題目中的條件,寫出類似於第 25頁最下面的變換規則。我們先列出如下內容 a f n 1 f 2 f 3 f 4 f 5 b f n 2 f 1 f 2 f 3 f 4 c f n 3 f 0 f 1 f 2 f 3 於是繼而得出下...

SICP練習 12 練習1 18

練習1.8 和前兩題一樣,依舊是只能用對數步數。而且這個迭代過程要基於加 加倍和折半運算。這乙個習題要用到前面的函式,因此最好的做法是,每次都將寫好的 儲存起來。load test1.18.scm 這行 可以用來載入 而儲存可以用c x,c w。以下是該題的 這次我們寫成塊結構 define x y...

SICP練習 17 練習1 23

練習1.23 首先我們按照題目要求來寫出相應的next函式,然後再修改find divisor函式。define next x if x 2 3 n 2 define find divisor ntest divisor cond square test divisor n n divides?te...