2013-10-10 2 views
35

में प्रिंट और putStrLn के बीच अंतर मैं उलझन में हूं। मैं print का उपयोग करने का प्रयास करता हूं, लेकिन मुझे पता है कि लोग putStrLn लागू करते हैं। उनके बीच वास्तविक मतभेद क्या हैं?हास्केल

print $ function 
putStrLn $ function 
+22

'प्रिंट = putStrLn। शो ' – Satvik

+1

क्या आपने' प्रिंट 3', 'putStrLn 3', 'print" तीन "', 'putStrLn" ghci में तीन "' चलाने की कोशिश की है? यह वास्तव में एक प्रश्न है जिसका प्रयोग थोड़ा सा प्रयोग करके किया जा सकता है। –

उत्तर

61

समारोह putStrLn एक String लेता है और स्क्रीन पर प्रदर्शित करता है, एक नई पंक्ति चरित्र के बाद ( एक Str आईएनजी एक नया एल मैं n ई द्वारा पीछा कर दिया)।

क्योंकि यह केवल String रों साथ काम करता है, एक आम मुहावरा, किसी भी वस्तु ले यह एक 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'" AS "जैसे गैर ASCII वर्ण दिखा सकता है जबकि' print' नहीं कर सकता। मैं वास्तव में क्यों नहीं जानता कि क्यों। 'PutStrLn" я "' बनाम 'प्रिंट "я" 'आज़माएं। – CMCDragonkai

+1

@CMCDragonkai यह कारण है कि मैं जवाब में देता हूं। 'प्रिंट' फ़ंक्शन 'show' के आउटपुट पर' putStrLn' को कॉल करता है, और 'शो' फ़ंक्शंस उन्हें प्रदर्शित करने के लिए तारों को उनके यूनिकोड प्रतिनिधित्व में परिवर्तित करता है। 'Я' (सिरिलिक अक्षर "या") के लिए यूनिकोड पॉइंट यू + 044 एफ, या 1103 दशमलव में है, यही कारण है कि 'शो "я" 'outputs' "\" \\ 1103 \ "" - यह वही है जो आप सात वर्णों '"\ 1103" से बना स्ट्रिंग प्राप्त करने के लिए ghci टाइप करना होगा (इसे आजमाएं!) –

+0

क्या इसका मतलब यह नहीं है कि सामान्य रूप से पाठ के साथ काम करते समय' putStrLn' का उपयोग करना बेहतर होगा? – CMCDragonkai