首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SICP累积函数

SICP累积函数
EN

Stack Overflow用户
提问于 2010-09-08 21:44:48
回答 1查看 3.8K关注 0票数 3

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

代码语言:javascript
复制
(accumulate cons nil 
  (filter pred
         (map op sequence)))

使用此方法的两个示例操作fibonacci数的列表,即even-fibslist-fib-squares

累积、过滤和映射函数也在第2.2节中定义。让我困惑的部分是为什么作者在这里包含了accumulateaccumulate采用3个参数:

  • 要应用的二进制函数
  • 初始值,用作函数的最右边参数。
  • 将应用该函数的列表

使用书中的定义将累加应用于列表的示例:

代码语言:javascript
复制
    (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吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-08 21:55:16

我确信,accumulate的这两种用法仅仅说明了这样一个事实:“允许元素构造一个列表”可以被看作是一个累加过程,就像“乘数以获得一个乘积”或“和数获得一个总”一样。你说得对,这种积累实际上是不可行的。

(请注意,如果filter的输出和accumulate的输入不是一个列表,那么这显然是一个更有用的操作;例如,如果它代表一个延迟生成的序列。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3672158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档