2013-10-10 42 views
35

我很困惑。我嘗試使用print,但我知道人們應用putStrLn。他們之間真正的區別是什麼?Haskell中print和putStrLn的區別

print $ function 
putStrLn $ function 
+22

'print = putStrLn。顯示' – Satvik

+1

您是否嘗試在ghci中運行'print 3','putStrLn 3','print'three「','putStrLn」three「'?這實際上是一個可以通過一些實驗來回答的問題。 –

回答

61

函數putStrLnString並顯示到屏幕上,接着是換行符(一個海峽 ING後跟一個新大號Ñ E)。

因爲它只適用於String s,所以一個常見的習慣用法是取任意對象,將其轉換爲String,然後應用putStrLn來顯示它。一個對象轉換爲String通用的方法是使用show功能,所以一旦你發現,它不是一個非常大的拉伸來定義一個函數,轉換你的代碼最終會得到很多

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

String並顯示在一個步驟

print x = putStrLn (show x) 

這是完全print功能是什麼的字符串。

+0

'putStrLn'可以顯示非ASCII字符,如「я」,而'print'不能。我不知道爲什麼。試試'putStrLn「я」'vs'print「я」'。 – CMCDragonkai

+1

@CMCDragonkai這是我給出答案的原因。 'print'函數在'show'的輸出中調用'putStrLn','show'函數將字符串轉換爲unicode表示形式以顯示它們。 'я'(西里爾文字母「ya」)的Unicode點爲U + 044F,或者是十進制的1103,這就是爲什麼'show「я」'輸出'「\」\\ 1103 \「」' - 這就是你必須輸入ghci才能得到由七個字符組成的字符串'「\ 1103」'(嘗試一下!) –

+0

這是否意味着在處理一般文本時最好使用'putStrLn'? – CMCDragonkai

相關問題