SICP 習題 (2 17)解題總結 列表的遍歷

2021-06-25 20:22:15 字數 521 閱讀 5723

sicp 習題2.17 要求我們定義出過程last-pair,它返回只包含給定表裡之後乙個元素的表。

比如 (last-pair (list 23 72 149 34))的結果應該是(34)

當你開始做這道題的時候你應該已經看完書中有關list操作的內容了,你應該明白car和cdr分別是什麼意思,也應該知道如何通過遞迴呼叫遍歷乙個list。

有了以上基礎的話完成習題2.17就是小菜一碟啦,基本思路就是不斷對目標list進行cdr操作,直到最後乙個元素為止。

在遞迴實現上的基本思路就是看目標list是不是只有乙個元素,如果是的話就直接返回目標list,如果不是的話取(cdr 目標list),再遞迴判斷。

實現**如下:

(define (last-pair input-list)

(if (null? (cdr input-list))

input-list

(last-pair (cdr input-list))))

簡單搞定!

SICP 習題 1 14 解題總結

sicp 習題 1.14要求計算出過程count change的增長階。count change是書中1.2.2節講解的用於計算零錢找換方案的過程。要解答習題1.14,首先你需要理解count change的工作方式,要理解count change的工作方式,最好是自己去實現一遍count chan...

SICP 習題 1 22 解題總結

sicp 習題 1.22 要求改進題中列舉出來檢查素數的過程,用來求1000,10000,100 000,還有1000 000附近的素數,然後比較求這些素數的時間,看是否符合 n 的複雜度。要完成這道題首先要將題目中列出的過程照抄到你的scheme環境中。因為書中的 使用了 runtime 過程,我...

SICP 習題 1 25 解題總結

sicp 習題 1.25 就是我上面說過的傷自尊的題了。習題1.25說到有個叫allyssa p.hacker的人說expmod過程完全沒有必要搞那麼麻煩,直接使用前面的fast expt過程和remainder過程就好了,她 叫alyssa的應該是女的吧 覺得可以這樣定義expmod define...