我的一个朋友问我为什么要学习 Haskell。为了展示 Haskell 的强大功能,我编写了一个小程序来显示素数列表:
main = do
putStr "Enter the number of prime numbers to display: "
number <- fmap read getLine :: IO Int
print . take number . filter isPrime $ [2..]
isPrime :: Integer -> Bool
isPrime n = not . any ((== 0) . mod n) $ [2..floor . sqrt . fromInteger $ n]
该程序按预期工作,除了一个小异常。它在从用户处获取输入数字后打印提示消息,从而产生如下输出:
12
Enter the number of prime numbers to display: [2,3,5,7,11,13,17,19,23,29,31,37]
为什么 Haskell 不能正确排序 IO 操作?我哪里出错了?
这看起来更像是缓冲问题,而不是排序问题。你在什么平台?您是否尝试过强制无缓冲输出?
hSetBuffering stdout NoBuffering -- from System.IO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)