2
だから、僕は数を尋ねるプログラムを作っNとフィボナッチ数列のN番目の用語が表示さ:私はGHCiの中でプログラムを実行するとHaskellのコンソールプログラムの出力を間違った順序で
import Control.Monad (forever)
main = forever $ do
putStrLn ""
putStr "Which Fibonacci sequence number do you need? "
number <- readLn :: IO Int
putStrLn $ "The Fibonacci number you wanted is " ++ (show $ fib number) ++ "."
putStrLn ""
where fib :: Int -> Integer
fib number = fibs !! number
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
をまたはrunhaskellを介して、それは正常に実行されます。それは、ある数のために私に尋ね、私は同じ行にそれを入力することができますし、別の行に番号を返します。
[email protected]:~/Haskell$ ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
Prelude> :l Fib.hs
[1 of 1] Compiling Main (Fib.hs, interpreted)
Ok, modules loaded: Main.
*Main> main
Which Fibonacci sequence number do you need? 4
The Fibonacci number you wanted is 3.
しかし、私はコンパイルされたプログラムを実行すると、それはこれを返します。
[email protected]:~/Haskell$ ./Fib
4
Which Fibonacci sequence number do you need? The Fibonacci number you wanted is 3.
I.e.私が番号を入力するのを待ってから、すべてのプロンプトを1行に返します。 どうしたのですか?これを回避する方法はありますか?
見つかった回答は、http://stackoverflow.com/questions/2500459/wrong-io-actions-order-using-putstr-and-getlineを参照してください(これを重複としてマークするフラグはありません) –
関連:https://stackoverflow.com/questions/13190314/haskell-do-monad-io-happens-out-of-order – Gallifreyan