首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"iterate“是否改变了应用函数的含义?

"iterate“是否改变了应用函数的含义?
EN

Stack Overflow用户
提问于 2011-09-09 20:39:28
回答 3查看 234关注 0票数 2

当我将下面的lambda表达式放入ghci中时,我得到1

代码语言:javascript
复制
ghci> (\x -> x+1) 0
1

但是当我在iterate中使用该函数时,我会得到

代码语言:javascript
复制
ghci> take 10 (iterate (\x -> x+1) 0)
[0,1,2,3,4,5,6,7,8,9]

我希望得到一个与[1..10]相等的列表。为什么不行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-09 20:42:32

iterate的第一个结果是没有应用函数的原始输入,即函数被调用0次。这就是为什么结果与您的预期相差一倍的原因。

票数 10
EN

Stack Overflow用户

发布于 2011-09-09 20:50:53

更具体地说,iterate是这样实现的:

代码语言:javascript
复制
iterate f v = v : iterate f (f v)

只需记住,你给iterate的起始值将出现在列表的第一位--就是这样。

票数 7
EN

Stack Overflow用户

发布于 2011-09-10 02:24:08

Stop...Hoogle时间!

http://haskell.org/hoogle/?hoogle=iterate

单击iterate

http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:iterate

iterate f xx返回重复应用f的无限列表:

迭代f x == x,f x,f (f x),...

这就对了。它是这样工作的,因为它说它是这样工作的。我不是想轻率行事,只是希望说明Hoogle和文档的用处。(听起来像是Haskell乐队的好名字:“胡格尔和文档”)

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

https://stackoverflow.com/questions/7361765

复制
相关文章

相似问题

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