题
在 计算机程序的结构和解释 (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
除了与本节中其他类似结构化的函数一致之外?
解决方案
我确定这两个用途 accumulate
仅仅说明了以下事实:“要构建列表的要素”可以视为累积过程,就像“乘以获得产品的数字”或“求和数字以获取总计”罐的方式相同。您是正确的,积累有效地是无效的。
(顺便说一:请注意,如果输出的输出,这显然可能是一个更有用的操作 filter
和输入 accumulate
不是清单;例如,如果它代表了懒惰的序列。)
不隶属于 StackOverflow