SICP积累功能

时间:2010-09-08 21:44:49

标签: scheme sicp

计算机程序的结构和解释(SICP)Section 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

1 个答案:

答案 0 :(得分:5)

我确信accumulate的这两种用法仅仅说明了“构建列表的元素”可以被视为一个累积过程,就像“乘以数字以获得一个”一样。产品“或”总和数字以获得总数“可以。你是正确的,积累实际上是无操作。

(旁白:请注意,如果filter的输出和accumulate的输入不是列表,这显然可能是更有用的操作;例如,如果它表示延迟生成的序列。)