2013-10-10 19 views
35

kafam karıştı. Ben print kullanmaya çalışıyorum ama insanlar putStrLn geçerlidir biliyorum. Aralarındaki gerçek farklılıklar nelerdir?Baskı ve putStrLn arasındaki fark Haskell

print $ function 
putStrLn $ function 
+22

'print = putStrLn. show ' – Satvik

+1

' Yazdır 3 ',' putStrLn 3 ', 'print' üç '', 'putStrLn' üç' 'ghci çalıştıran denediniz mi? Bu gerçekten biraz deneme ile cevaplanabilen bir sorudur. –

cevap

61

fonksiyon putStrLn bir yeni satır karakteri ile bir String alır ve ekrana görüntüler ( yeni L i n e ardından Str ing koymak).

Yalnızca String s ile çalıştığından, genel bir deyim, herhangi bir nesneyi almak, onu String'a dönüştürmek ve görüntülemek için putStrLn uygular. Bir String Bir nesneyi dönüştürmek için jenerik bir yol show fonksiyonu ile, yani, bu dönüştüren bir işlevi tanımlamak için çok büyük bir streç olmadığını fark kez kodunuzu

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

bir sürü sona ereceğini bir String ve tek adımda tam print işlevi budur

print x = putStrLn (show x) 

dizesini görüntüler.

+0

'putStrLn' print' olamaz' oysa "я" gibi olmayan ASCII karakterleri gösterebilir. Nedenini neden bilmiyorum. "PutStrLn" я "' vs "print" я "' ı deneyin. – CMCDragonkai

+1

Ben cevap vermek nedeni olur @CMCDragonkai. 'Print' fonksiyon show'' çıkışında 'putStrLn' çağırır ve' show' fonksiyonları onları görüntülemek için onların unicode temsil dizeleri dönüştürür. 'Я' (Kiril harf "ya") unicode noktası U + 044F veya ondalık olarak 1103'tür, bu yüzden "я" çıktılarını gösterir "' \ "\\ 1103 \" "' - bu ne yedi karakterden oluşan diziyi elde etmek için ghci yazmalıydı. "\ 1103" '(dene!) –

+0

Bu, genel olarak metinle çalışırken 'putStrLn' kullanmak daha iyi olur mu? – CMCDragonkai