我正在玩Haskell中的一个简单程序:
hello :: String -> String
hello s = "Hello, " ++ (trim s) ++ "!\n"
trim :: String -> String
trim [] = []
trim s = head $ words s
main :: IO()
main = do putStr "\nPlease enter your name: "
name <- getLine
hstring <- return $ hello name
putStr hstring
Run Code Online (Sandbox Code Playgroud)
这是我期待的输出:
Please enter your name: John Doe
Hello, John!
Run Code Online (Sandbox Code Playgroud)
当我将程序加载到ghci时,这可以正常工作.但是当我使用编译程序时
ghc -o hello.exe hello.hs
Run Code Online (Sandbox Code Playgroud)
它启动,等待输入,然后同时打印两个提示:
John Doe
Please enter your name: Hello, John!
Run Code Online (Sandbox Code Playgroud)
为什么交互式环境和编译器之间的行为不同,我如何让编译器做我想做的事情?
在此先感谢您的帮助!
这是常见问题解答.你的线路正在缓冲.使用:
import System.IO
main = do
hSetBuffering stdout NoBuffering
...
Run Code Online (Sandbox Code Playgroud)
此外,您的代码有点......独特.例如,你说:
hstring <- return $ hello name
putStr hstring
Run Code Online (Sandbox Code Playgroud)
当你能做到:
let hstring = hello name
putStr hstring
Run Code Online (Sandbox Code Playgroud)
要不就:
putStr $ hello name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |