SICP練習 62 練習2 33

2022-04-11 03:31:50 字數 874 閱讀 7471



練習2.33

既然要用到accumulate,那麼我們先來回顧一下這個函式好了。其有三個引數,乙個操作符,乙個用來作為初始化的值,乙個是需要運算的序列。題目中的map已有的定義如下:

(define (map p sequence)

(accumulate (lambda (x y) ?>)

nilsequence))

這裡的nil也是』(),其作為accumulate的引數initial。後面的sequence也就是accumulate的引數sequence。那麼lambda表示式裡要做的就是處理這些東西了。我們用map的引數來處理初始值,然後將其用cons組合。而很明顯的,nil對應於x,seguence對應於y。於是乎。

雖然不太規範,但意思就是這麼個意思。

(accumulate cons ?> ?>))

同樣在第68頁也有length的定義。其實這三個小題的難點以及出題的目的都是在於accumulate。通過不斷的將sequence不斷的car,並且累計計數加1就可以得出length了。

(define (length sequence)

(accumulate (lambda (x y) (+ 1 y))

0sequence))

SICP練習 62 練習2 33

練習2.33 既然要用到accumulate,那麼我們先來回顧一下這個函式好了。其有三個引數,乙個操作符,乙個用來作為初始化的值,乙個是需要運算的序列。題目中的map已有的定義如下 define map p sequence accumulate lambda x y nilsequence 這裡的...

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