在计算机程序的结构和解释(SICP)部分 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
除了与本节中其他类似结构的功能保持一致之外,还有其他原因吗?