SICP練習 92 練習2 65

2021-06-28 22:55:01 字數 616 閱讀 6034

最後一道題了,來個總結倒是很不錯。要完成兩個函式,我們就要用到前面所學,首先用練習2.63中的函式將樹變成表,這樣有利於後續的處理,而根據前面的習題,用tree->list-2會更加快速。然後要實現並集或補集的功能,也要用到第104頁相關的函式。題目要求的是平衡二叉樹,因此還要用到練習2.64中的list->tree函式將最後的結果平衡。這三個函式的複雜度都出奇的一致為n,因此最終的函式的複雜度也為n。因為其中要用到intersection-set等函式,因此我們將最終題目所求的函式稍微改下名。

(define

(union-tree tree1 tree2)

(list->tree

(union-set

(tree->list-2 tree1)

(tree->list-2 tree2))))

(define

(intersection-tree tree1 tree2)

(list->tree

(intersection-set

(tree->list-2 tree1)

(tree->list-2 tree2))))

相信大家已經看到了,這道題並不難,只要我們能夠想到運用前面所學的知識。

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