SICP积累功能

Jar*_*red 3 scheme sicp

计算机程序的结构和解释(SICP)第2.2.3节中,使用以下定义了几个函数:

(accumulate cons nil 
  (filter pred
         (map op sequence)))
Run Code Online (Sandbox Code Playgroud)

两个使用它的例子在斐波那契数列表上运作,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)
Run Code Online (Sandbox Code Playgroud)

由于第三个参数是一个列表,(accumulate cons nil some-list)只会返回some-list,在这种情况下,结果(filter pred (map op sequence))是一个列表.

accumulate除了与该部分中其他类似结构的函数的一致性之外,是否有理由使用此类函数?

mqp*_*mqp 5

我确信这两种用法accumulate仅仅是说明"构建列表的构成要素"可以被视为累积过程,其方式与"乘以数字以获得产品"或"求和数来获取"相同.总共"可以.你是正确的,积累实际上是无操作.

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