在結構和計算機程序(SICP)的解釋Section 2.2.3多個功能使用規定:SICP累加功能
(accumulate cons nil
(filter pred
(map op sequence)))
兩個例子利用這個Fibonacci數,even-fibs
的名單上運行, list-fib-squares
。
積累,過濾器和映射函數也在2.2節中定義。令我困惑的部分是爲什麼作者在這裏包含了accumulate
。 accumulate
需要3個參數:
的二元函數施加
的初始值,作爲最右邊的參數給函數
列表至該函數將應用於
使用書中的定義將累積應用於列表的示例:
(accumulate cons nil (list 1 2 3))
=> (cons 1 (cons 2 (cons 3 nil)))
=> (1 2 3)
由於第三個參數是一個列表,(accumulate cons nil some-list)
只返回some-list
,而在這種情況下(filter pred (map op sequence))
結果列表。
除了與該部分中其他類似結構化函數的一致性,是否有這種使用accumulate
的原因?
它還似乎有意試圖在這裏複製even-fibs的結構:http://mitpress.mit.edu/sicp/full-text/book/book-ZH-15.html#%_idx_1724來說明相似之處。 – 2010-09-08 21:59:31
需要注意的是,如果您繼續使用scheme,標準庫foldr可能能夠處理列表之外的不同形式的序列,並且如果您希望結果成爲列表,那麼consing可能是合適的。 (這是我能想到的唯一的另一種情況,你可能想要做這種事情。) – 2010-09-08 22:02:03
啊,這很有道理,可以使用非列表序列,並且這證明了一種機械轉換早期的偶數函數。謝謝你們兩位,自從我在本週早些時候閱讀它以來,這一直在困擾着我。 – Jared 2010-09-08 22:10:14