2012-01-16 15 views
7

में पूर्णांक की सूची में कैसे परिवर्तित करूं? मेरे पास String"1 2 3 4 5" है। मैं इसे Haskell में [1,2,3,4,5] जैसे पूर्णांक की सूची में कैसे परिवर्तित कर सकता हूं? यदि सूची "12345" है तो क्या होगा?मैं स्ट्रिंग को हास्केल

+9

-1, आप कोड आप के साथ की कोशिश की है जोड़ सकते हैं? – Reddy

उत्तर

21

आप उपयोग कर सकते हैं

Prelude> map read $ words "1 2 3 4 5" :: [Int] 
[1,2,3,4,5] 

यहाँ हम words का उपयोग करने से व्हाइटस्पेस पर "1 2 3 4 5" विभाजित करना होगा ताकि हम ["1", "2", "3", "4", "5"] मिलता है। read फ़ंक्शन अब व्यक्तिगत तारों को पूर्णांक में परिवर्तित कर सकता है। इसमें Read a => String -> a टाइप है, इसलिए यह वास्तव में Read टाइप क्लास में कुछ भी परिवर्तित कर सकता है, और इसमें Int शामिल है। यह रिटर्न प्रकार में टाइप वैरिएबल की वजह से है जिसे हमें ऊपर दिए गए प्रकार को निर्दिष्ट करने की आवश्यकता है।

रिक्त स्थान के बिना स्ट्रिंग के लिए, हमें प्रत्येक Char को एकल तत्व सूची में परिवर्तित करने की आवश्यकता है। यह (:"") को लागू करके किया जा सकता है - String केवल Char एस की एक सूची है।

Prelude> map (read . (:"")) "12345" :: [Int] 
[1,2,3,4,5] 
+1

बहुत मार्टिन धन्यवाद .. आप चट्टान .. –

8

त्रुटि प्रबंधन एक अभ्यास के रूप में छोड़ा गया है। (संकेत: आप एक अलग वापसी प्रकार की आवश्यकता होगी।)

+0

मुझे लगता है कि आपका मतलब q2 = .. q2 :: – aelguindy

+0

धन्यवाद @aelguindy। – dave4420

2

वहाँ एक समारोह मॉड्यूल Data.ChardigitToInt कहा जाता है में परिभाषित किया गया है: हम तो जैसे पहले फिर से read लागू होते हैं। यह एक चरित्र लेता है और एक संख्या देता है, जब तक कि चरित्र को हेक्साडेसिमल अंक के रूप में व्याख्या किया जा सके।

यदि आप इस समारोह का उपयोग अपने पहले उदाहरण में करना चाहते हैं, जहां एक स्थान से अलग संख्याएं हैं, तो आपको रिक्त स्थान से बचने की आवश्यकता होगी। आप ऐसा कर सकते हैं एक साधारण फ़िल्टर

> map digitToInt $ filter (/=' ') "1 2 1 2 1 2 1" 
[1,2,1,2,1,2,1] 

दूसरे उदाहरण है, जहां अंक जहां बिल्कुल अलग नहीं, और भी आसान है के साथ है क्योंकि आप

> map digitToInt "1212121" 
[1,2,1,2,1,2,1] 

मुझे लगता है कि चाहते हैं एक फिल्टर की जरूरत नहीं है digitToInt से बेहतर है क्योंकि यह अभिव्यक्ति के प्रकार पर निर्भर नहीं है, जो मुश्किल हो सकता है (जो बदले में मुझे यह पोस्ट कैसे मिला = पी)। वैसे भी, मैं हैकेल के लिए नया हूं इसलिए मैं गलत भी हो सकता हूं =)।

0

आप उपयोग कर सकते हैं:

> [read [x] :: Int | x <- string] 
संबंधित मुद्दे