在计算机程序的结构和解释中,第2.2.3节定义了以下几个函数:
(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)因为第三个参数是list,所以(accumulate cons nil some-list)只返回some-list,在本例中,(filter pred (map op sequence))的结果是一个list。
除了与本节中其他类似结构的函数的一致性之外,还有其他原因使用accumulate吗?
发布于 2010-09-08 21:55:16
我确信,accumulate的这两种用法仅仅说明了这样一个事实:“允许元素构造一个列表”可以被看作是一个累加过程,就像“乘数以获得一个乘积”或“和数获得一个总”一样。你说得对,这种积累实际上是不可行的。
(请注意,如果filter的输出和accumulate的输入不是一个列表,那么这显然是一个更有用的操作;例如,如果它代表一个延迟生成的序列。)
https://stackoverflow.com/questions/3672158
复制相似问题