计算机程序的结构和解释(SICP)Section 2.2.3使用以下几种函数定义:
(accumulate cons nil
(filter pred
(map op sequence)))
使用此示例的两个示例对斐波那契数字列表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
?
答案 0 :(得分:5)
我确信accumulate
的这两种用法仅仅说明了“构建列表的元素”可以被视为一个累积过程,就像“乘以数字以获得一个”一样。产品“或”总和数字以获得总数“可以。你是正确的,积累实际上是无操作。
(旁白:请注意,如果filter
的输出和accumulate
的输入不是列表,这显然可能是更有用的操作;例如,如果它表示延迟生成的序列。)