2013-10-10 2 views
35

혼란 스럽습니다. 나는 print을 사용하려고 시도하지만 사람들이 putStrLn을 적용한다는 것을 알고 있습니다. 그들 사이의 진정한 차이점은 무엇입니까?하스켈의 Print와 putStrLn의 차이점

print $ function 
putStrLn $ function 
+22

'print = putStrLn. show' – Satvik

+1

ghci에서'print 3','putStrLn 3','print "three,'putStrLn"three "'를 실행 해 보셨습니까? 이것은 정말로 약간의 실험으로 대답 할 수있는 질문입니다. –

답변

61

함수 putStrLn 개행 문자 뒤에하는 String를 받아 화면에 표시 (에게 새로운 L I N E 뒤에 str을 ING 넣어).

String과 만 작동하므로 공통된 관용구는 어떤 개체를 가져 와서 String으로 변환 한 다음 putStrLn을 적용하여 표시하는 것입니다. String에 객체를 변환하는 일반적인 방법은 show 기능, 그래서 당신이 그것을 그 변환 함수를 정의 할 수있는 매우 큰 스트레치가 아니다 통지되면 코드는

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

의 많은 끝낼 것 String에 한 단계 정확히 print 기능이 무엇

print x = putStrLn (show x) 

의 문자열을 표시합니다.

+0

'putStrLn'은 "я"와 같은 비 ASCII 문자를 보여줄 수 있지만'print'는 할 수 없습니다. 나는 왜 그런지 정말로 모른다. 'putstrLn "ò"'vs'print "я"'시도해보십시오. – CMCDragonkai

+1

@CMCDragonkai 그 이유는 내가 대답을주고 있기 때문입니다. 'print' 함수는'show'의 출력에'putStrLn'을 호출하고,'show' 함수는 문자열을 표시하기 위해 문자열을 유니 코드 표현으로 변환합니다. 'я'(키릴 문자 "ya")의 유니 코드 포인트는 U + 044F 또는 십진수 1103입니다. 따라서 'show "я"'는 "\"1103 \ ""을 출력합니다. "- 이것은 여러분이 ghci를 입력하여 7 개의 문자'\ 1103 "'(시도해보십시오!)로 구성된 문자열을 가져와야합니다. –

+0

일반적으로 텍스트로 작업 할 때'putStrLn'을 사용하는 것이 더 낫지는 않습니까? – CMCDragonkai