SICP練習 70 練習2 41

2021-06-28 19:11:10 字數 827 閱讀 1832



練習2.41

這道題其實就是書中素數示例的變種,其本質是一樣的。因此我們也按照同樣的次序來完成這個過程。首先第一步,我們來完成生成3個相異整數構成的三元組。但在上一題中我們已經寫出了能夠產生2個相異整數構成的二元組了。因此我們只要多產生乙個i,讓其與產生的二元組結合,便能產生三元組了。那麼,開工吧。

(define (unique-triples n)

(flatmap (lambda (i)

(map (lambda (j)

(cons i j))

(unique-pairs (- i 1))))

(enumerate-interval 1 n)))

然後還需要定義乙個謂詞來判斷這個三元組的三元素之和是否等於s。書中的例子也有乙個prime-sum?謂詞不是嗎。

(define (triples-sum? triples s)

(= s (+ (car triples)

(cadr triples)

(caddr triples))))

通過查詢資料發現還有讀者作出了乙個巧妙地過程。

(define (triples-sum? triples s)

(= sum (fold-right + 0 triples)))

真的是活學活用啊。

然後還需要乙個能夠過濾掉不符合條件的三元組的函式。

(define (filter-triples s triples)

(filter (lambda (x)

(triples-sum? x s))

triples))

因此便能產生如題中描述的那般函式了。

SICP練習 70 練習2 41

練習2.41 這道題其實就是書中素數示例的變種,其本質是一樣的。因此我們也按照同樣的次序來完成這個過程。首先第一步,我們來完成生成3個相異整數構成的三元組。但在上一題中我們已經寫出了能夠產生2個相異整數構成的二元組了。因此我們只要多產生乙個i,讓其與產生的二元組結合,便能產生三元組了。那麼,開工吧。...

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