当条件满足时如何摆脱迭代循环?

时间:2017-11-05 14:20:30

标签: loops haskell

我想用g迭代函数iterate。当我运行我的代码时,循环无限运行。在满足条件时是否有可能退出循环?

类似于if g x > 100 then stop

我的代码:

f x = iterate g x

g x = 2 * x

2 个答案:

答案 0 :(得分:4)

只需翻转条件,并保持f x = takeWhile (<= 100) $ iterate g x

f = takeWhile (<= 100) . iterate g

这也可以免费提供:

iterate

这将取自public static MediaPlayer player; public static void SoundPlayer(Context ctx,int raw_id){ player = MediaPlayer.create(ctx, raw_id); player.setLooping(true); // Set looping player.setVolume(100, 100); player.start(); } 返回的无限列表,而累加器小于或等于100。

答案 1 :(得分:1)

是的,您可以使用takeWhile (not . p) [],相当于

foldr (\x r -> if (not (p x)) then (x:r) else []) []

或有时以下内容很有用,

takeUntil p = foldr (\x r -> if (not (p x)) then (x:r) else [x]) []

如果你想将最后一个元素包括在序列中。

在您的情况下,您需要撰写takeWhile (not . (> 100)) . iterate (*2)takeUntil (> 100) . iterate (*2)

(not . (> 100))当然与(<= 100)相同。

相关问题