SICP練習 61 練習2 31 2 32

2021-06-28 19:10:07 字數 499 閱讀 5698



練習2.31

我想說我已經越來越喜歡抽象了,將上一題中的map版本的square-tree抽象的方法是新增乙個引數f,f是乙個函式,因此將square替換成f即可。如下。

(define (map-tree f tree)

(map (lambda (sub-tree)

(if (pair? sub-tree)

(tree-map f sub-tree)

(f sub-tree)))

tree))

(define (square-tree tree)

(tree-map square tree))

下面就來測試一下咯。來個稍微厲害點的表好了。

(square-tree 『(1 2 (3 4) 5 (6 7) ( (8(9 ) ) ) 10 ) )

;value: (1 4 (9 16) 25 (36 49) ( (64(81 ) ) ) 100 )

練習2.32迭代

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