我想用g
迭代函数iterate
。当我运行我的代码时,循环无限运行。在满足条件时是否有可能退出循环?
类似于if g x > 100 then stop
。
我的代码:
f x = iterate g x
g x = 2 * x
答案 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)
相同。