Haskell 中 until 函数怎么用呀 ?
- Prelude> :t until
- until :: (a -> Bool) -> (a -> a) -> a -> a
- Prelude> until (>4) (+2) 0
- 6
- Prelude> until (>5) (+2) 0
- 6
- Prelude> until (>6) (+2) 0
- 8
- Prelude> until (>7) (+2) 0
- 8
- Prelude> until (>8) (+2) 0
- 10
复制代码
只知 until 是一个循环函数
试验了一把,还是看不出怎么用,不知其计算流程
它等同的 c 语言代码是什么呀?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
interate 类似 mathematica 中的 NestList,但后者需指定次数
NestList[f, x, 3]
{x, f[x], f[f[x]], f[f[f[x]]]}
而 until 则类似 mathematica 中的 NestWhile 或 FixedPoint
NestWhile[# + 2 & , 0, # <= 8 &]
10
FixedPoint[# + 2 &, 0, SameTest -> (#2 > 8 &)]
10
嗯,我表达的不准确
其实我想说的是:两者都有 f (f x) 部分
[ 本帖最后由 izhier 于 2009-4-22 18:43 编辑 ]
返回值完全不同了,而且 p 本身也可以是个很复杂的条件判断。
知道了
找到代码了
until :: (a -> Bool) -> (a -> a) -> a -> a
until p f x = if p x then x else until p f (f x)
原来是这样
和 iterate 有点相似,只是加了一个条件
iterate :: (a -> a) -> a -> [a]
iterate f x = x : iterate f (f x)
[ 本帖最后由 izhier 于 2009-4-22 13:34 编辑 ]