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启示吗?独自学习并不容易!!!非常感谢!!
positiveInts :: IO [Int]
positiveInts = do
putStr "Enter an integer: "
i <- readLn
if i < 0
then pure []
else (i:) <$> positiveInts