在计算机程序的结构和解释(SICP)第2.2.3节中,使用以下定义了几个函数:
(accumulate cons nil
(filter pred
(map op sequence)))
Run Code Online (Sandbox Code Playgroud)
两个使用它的例子在斐波那契数列表上运作,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)
Run Code Online (Sandbox Code Playgroud)
由于第三个参数是一个列表,(accumulate cons nil some-list)只会返回some-list,在这种情况下,结果(filter pred (map op sequence))是一个列表.
accumulate除了与该部分中其他类似结构的函数的一致性之外,是否有理由使用此类函数?