SICP練習 79 練習2 51

2022-04-11 03:03:16 字數 784 閱讀 3917

        練習

2.51

通過書中前面的內容,我們知道below中來將框架分成上下兩部分,而beside將框架分成左右兩部分。因此,below定義如下:

(define (below painter1 painter2)

(let ((split-point (make-vect 0.0 0.5)))

(let ((paint-top (transform-painter painter2

split-point

(make-vect 1.0 0.5)

(make-vect 0.0 1.0)))

(paint-down (transform-painterpainter1

(make-vect 0.0 0.0)

(make-vect 1.0 0.0)

split-point)))

(lambda (frame)

(paint-top frame)

(paint-down frame)))))

另一種利用上一題中的rotate270等可以很容易的實現:

(define (below painter1 painter2)

(lambda (frame)

((flip-horiz

(rotate90

(beside

(rotate270

(flip-horizpainter1))

(rotate270

(flip-horizpainter2)))))

frame)))

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