1

コード:

main = do
  putChar 't'
  putChar 'e'
  putChar 'h'

上記のコードを実行している間、私は得ています

*Main> main
teh*Main>

しかし、私は期待しています

*Main> main
teh
*Main>

私の質問: tehの代わりに teh*Main が来て次に* Mainが別の行にあるのはなぜですか?

haskell-mode で emacs23 を使用しています。

4

2 に答える 2

3

putChar cその1文字だけをコンソールに書き込みます。それが意図されたものです。したがって、後で改行をコンソールに出力しない限り、putCharputStrまたはその他の方法を使用しても、次の出力は同じ行に出力されます。動作は、C の場合と同じです。または、cat末尾に改行がないファイルの場合も同様です。どこにでもあります。実行可能な唯一の代替手段 (各出力が改行で終わっているかどうかを確認することはできません) は、無条件に ghci またはシェル プロンプトの前に改行を出力することです。

于 2012-08-02T02:00:00.063 に答える
2

それが本当にあなたを悩ませているなら、あなたはいつでも定義することができます

putCharLn :: Char -> IO ()
putCharLn c = do putChar c
                 putChar '\n'

main次のように定義します。

main = do putChar 't'
          putChar 'e'
          putCharLn 'h'

そして今:

*Main> main
teh
*Main> 
于 2012-08-02T05:23:29.957 に答える