如何在Haskell中将其更改为while循环?

问题描述 投票:0回答:1

Haskell具有挑战性!到目前为止,我发现我可以执行以下操作在Haskell中模拟一个for循环,以从用户那里获得数字列表:

myList >(\ s-> read s :: Int)getLine | t

太好了!因此,“ myList”包含我输入的五个整数。大!但是这里有个陷阱。代替迭代五次(或任何有限次数)的for循环,如何将上述转换为等效的while循环?

所以我在想的是这个,但是不幸的是,它不起作用。是否有某种“魔术”方法可以使它起作用?

takeWhile(\ x-> x> 0)$ sequence [putStr“输入整数:” >>(\ s-> read s :: Int) t

问题是(\ x-> x> 0)与Ints一起使用。 (或任何Num类型。)但是,该列表实际上是一堆IO整数。 x> 0返回布尔值。我需要一个返回IO Bool的函数吗?我有点迷路了。有人可以为我指点Haskell启示吗?独自学习并不容易!!!非常感谢!!

haskell functional-programming ghc ghci
1个回答
0
投票
相反,您必须编写一个IO操作,该操作读取一个Int,对其进行检查,然后决定是继续还是停止该时间。

positiveInts :: IO [Int] positiveInts = do putStr "Enter an integer: " i <- readLn if i < 0 then pure [] else (i:) <$> positiveInts

© www.soinside.com 2019 - 2024. All rights reserved.