SICP練習 86 練習2 58

2021-06-28 22:55:01 字數 1006 閱讀 9355

如果要由前序變成中序那就要有些大變動了。

(define

(make-sum a1 a2)

(cond

((=number? a10) a2)

((=number? a20) a1)

((and

(number?

a1)(number?

a2))

(+ a1 a2))

(else

(list

a1 『+ a2))))

(define

(sum? x)

(and

(pair? x)

(eq?

(cadr x) 『+)))

(define

(addend s)

(car s))

其餘的都不變。將乘法的計算用中序表達:

(define

(make-product m1 m2)

(cond

((or

(=number? m10)

(=number? m20))

0)((=number? m11) m2)

((=number? m21) m1)

((and

(number?

m1)(number?

m2))

(* m1 m2))

(else

(list

m1 『* m2))))

對應的product?和multiplier也要做修改。

(define

(product? x)

(and

(pair? x)

(eq?

(cadr x) 『*)))

(define

(multiplier p)

(car p))

而deriv則與書上的**一樣不必修改。至於第二小題,貌似無解。如果有知道的,望告知。

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...