计算机程序的结构和解释 (SICP) 第2.2.3节 使用以下方式定义了几个功能:

(accumulate cons nil 
  (filter pred
         (map op sequence)))

使用此操作的两个示例在斐波那契数字列表中 even-fibslist-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 不是清单;例如,如果它代表了懒惰的序列。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top