2013-10-10 4 views
35

私は混乱しています。私はprintを使用しようとしますが、私は人々がputStrLnを適用することを知っています。彼らの本当の違いは何ですか?ハスケルのプリントとputStrLnの違い

print $ function 
putStrLn $ function 
+22

'print = putStrLn。 show' – Satvik

+1

ghciに 'print 3'、' putStrLn 3'、 'print" three、 'putStrLn" three "'を実行しようとしましたか?これは本当に少しの実験で答えられる質問です。 –

答えて

61

機能putStrLnは改行文字に続いて、Stringを取り、それを画面に表示する(新しいLN電子続く筋力 INGを置きます)。

Stringでのみ機能するため、一般的な表現はオブジェクトを取り込み、Stringに変換してからputStrLnを適用して表示することです。あなたはそれを変換する関数を定義するための非常に大きなストレッチではない、ということに気づくたら、あなたのコードが

putStrLn (show 1) 
putStrLn (show [1, 2, 3]) 
putStrLn (show (Just 42)) 

の多くで終わるだろうのでStringにオブジェクトを変換する一般的な方法は、show機能付きですStringへと一歩を正確にprint機能があるものである

print x = putStrLn (show x) 

に文字列を表示します。

+0

'putStrLn'は"я "のような非ASCII文字を表示できますが、' print'は表示できません。私は本当に理由を知らない。 'putstrLn"я "' vs 'print"я "'を試してみてください。 – CMCDragonkai

+1

@CMCDragonkai私が答えを出す理由です。 'print'関数は' show'の出力に 'putStrLn'を呼び出し、' show'関数はそれらを表示するために文字列をそれらのユニコード表現に変換します。 'я'(キリル文字 "ya")のユニコードポイントは、U + 044Fまたは10進数で1103です。これは、 'show"ò "' '' \ "1103 \" "を出力する理由です。 '' \ 1103 "(試してみてください)の7文字からなる文字列を取得するには、ghciを入力する必要があります。 –

+0

一般的にテキストを扱うときに' putStrLn'を使用するほうがよいでしょうか? – CMCDragonkai

関連する問題