2013-10-10 41 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

相关问题