我的一个朋友问我为什么要学习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]
Run Code Online (Sandbox Code Playgroud)
该程序按预期工作,除了轻微的异常.它从用户获取输入数字后打印提示消息,产生如下输出:
12
Enter the number of prime numbers to display: [2,3,5,7,11,13,17,19,23,29,31,37]
Run Code Online (Sandbox Code Playgroud)
为什么Haskell没有正确排序IO操作?我哪里错了?
JB.*_*JB. 23
这看起来更像是缓冲而不是排序问题.你在什么平台上?你试过强制无缓冲输出吗?
hSetBuffering stdout NoBuffering -- from System.IO
Run Code Online (Sandbox Code Playgroud)
Ada*_*fer 10
stdin并且stdout是两个不需要任何连接的不同文件.以Unix shell命令为例grep:
$ seq 1 100 | grep 2$ | less
Run Code Online (Sandbox Code Playgroud)
seq 1 100打印的数字1到100到其stdout它是grep小号stdin(|连接stdout一个命令到stdin一个其他的).grep然后写入给定正则表达式匹配到其的所有行stdout是less小号stdin.
要强制stdout(或任何其他文件)使用hFlush,请使用System.IO:
hFlush stdout
Run Code Online (Sandbox Code Playgroud)