2009-05-28 16 views

उत्तर

38

खैर

f :: [String] -> [Int] 
f = map read 

नहीं?

+0

यह काम किया! :) टीएनएक्स – pier

2

इस तरह के प्रश्नों का सामान्य उत्तर कार्य को भागों में विभाजित करना है: [String] -> [Int]String -> Int और [a] -> [b] के संयोजन की तरह दिखता है। Hoogle (जुड़े) तुम दोनों के लिए कुछ परिणाम देगा, आइए देखते हैं ...

$ hoogle 'स्ट्रिंग -> इंट'
Test.HUnit.Base लेबल :: स्ट्रिंग -> नोड
प्रस्तावना त्रुटि: [चार] -> एक
प्रस्तावना लंबाई :: [एक] -> इंट
Data.List लंबाई :: [एक] -> इंट
Data.Char digitToInt :: चार -> इंट
Data.Char ord :: char -> Int
डीबग। ट्रेस ट्रेस :: स्ट्रिंग -> ए ->
नेटवर्क.बफ ferType buf_fromStr :: BufferOp एक -> स्ट्रिंग -> एक
Network.Socket भेज :: सॉकेट -> स्ट्रिंग -> आईओ इंट
Graphics.UI.GLUT.Callbacks.Window चार :: चार -> कुंजी
प्रस्तावना पढ़ने :: पढ़ें एक => स्ट्रिंग -> एक
Text.Read पढ़ :: पढ़ें एक => स्ट्रिंग -> एक
Data.String fromString :: IsString एक => स्ट्रिंग -> एक
GHC.Exts fromString :: एक => स्ट्रिंग IsString -> एक
Control.Monad.Trans.Error strMsg :: त्रुटि एक => स्ट्रिंग -> एक
Control.Monad.Error.Class strMsg :: त्रुटि एक => स्ट्रिंग -> एक
। ..

ओह, बकवास का एक बहुत। हम पहले संकुल से उन समाप्त कर सकते हैं आप के साथ कोई लेना देना नहीं है ...

प्रस्तावना त्रुटि :: [चार] -> एक
प्रस्तावना लंबाई :: [एक] -> इंट
Data.List लंबाई :: [एक] -> इंट
Data.Char digitToInt :: चार -> इंट
Data.Char ord :: चार -> इंट
प्रस्तावना पढ़ :: पढ़ें एक => स्ट्रिंग -> एक
पाठ। पढ़ें पढ़ना :: एक => स्ट्रिंग -> एक
डेटा। स्ट्रिंग से स्ट्रिंग :: IsString a => स्ट्रिंग ->
Text.Printf printf :: PrintfType r => स्ट्रिंग -> आर

error शायद ही आप क्या चाहते हैं जैसा लगता है। length न तो। digitToInt? सही प्रकार लगता है - और वास्तव में काम करता है, लेकिन केवल एक अंक संख्या के साथ। read? शायद वह नाम नहीं जिसे आपने उम्मीद की थी, लेकिन यदि आप इसके बारे में सोचते हैं तो यह सही बात है: एक स्ट्रिंग को कुछ अर्थपूर्ण (एक संख्या की तरह) में परिवर्तित करना कुछ पाठ पढ़ने जैसा है।

ठीक है, दूसरी तरफ Hoogle हमें बात है कि हम सही सामने चाहते हैं देता है:

$ hoogle '[एक] -> [ख]'
प्रस्तावना नक्शा :: (एक -> ख) -> [ए] -> [बी]
डेटा। सूची मानचित्र :: (ए -> बी) -> [ए] -> [बी]
प्रस्तावना concatMap :: (ए -> [बी]) - > [ए] -> [बी]
डेटा। सूची concatMap :: (ए -> [बी]) -> [ए] -> [बी]
डेटा। मेबे मानचित्र मैबे :: (ए -> शायद बी) -> [ए] -> [बी]
प्रीक्ड साइकल ई :: [ए] -> [ए]
डेटा। सूची चक्र :: [ए] -> [ए]
प्रीलूड इनिट :: [ए] -> [ए]
डेटा। सूची init :: [ एक] -> [एक]
प्रस्तावना रिवर्स :: [एक] -> [एक]

जैसा कि आप देख इन कार्यों में से सबसे "मानचित्र" के साथ कुछ कहा जाता है, फिर से नाम नहीं हो सकता है जो आप उम्मीद करते थे - लेकिन जाहिर है कि इस ऑपरेशन को क्या कहा जाता है! जिसे आप ढूंढ रहे हैं वह काफी सरल है।

अंत में, हमें उन दो कार्यों को गठबंधन करने की आवश्यकता है। map को इसके पहले तर्क के रूप में एक और फ़ंक्शन की आवश्यकता है - ठीक है, यह स्पष्ट रूप से read है! तो आप बस map से read पर लागू करें। अगला तर्क [a] एस की सूची है: आह, हम पहले से ही कर चुके हैं!

प्रस्तावना>:

आप GHCi अप शुरू करके इस जाँच कर सकते हैं टी मानचित्र पढ़
मानचित्र पढ़ :: पढ़ें ख => [स्ट्रिंग] -> [ख]

नहीं है अभी भी Int के बजाय यहां पर, लेकिन कभी भी यह ध्यान न दें कि: b कोई भी प्रकार हो सकता है जो आप चाहते हैं! - बशर्ते इसमें Read उदाहरण हो। Int है:

प्रस्तावना>: आई इंट
डेटा इंट = GHC.Types.I # GHC.Prim.Int # - `GHC.Types '
उदाहरण घिरा इंट में परिभाषित किया जाता है - में परिभाषित किया जाता है` GHC.Enum -
उदाहरण Eq इंट '
उदाहरण Enum इंट `GHC.Enum में परिभाषित किया जाता है' -` GHC.Classes में परिभाषित किया जाता है '
उदाहरण इंटीग्रल इंट - `GHC.Real में परिभाषित किया जाता है'
उदाहरण अंक Int - 'GHC.Num' में परिभाषित
उदाहरण Ord Int - `GHC.Classes 'में परिभाषित
उदाहरण पढ़ें 'जीएचसी.रेड' में परिभाषित Int-
उदाहरण वास्तविक इंट - 'जीएचसी.रियल' में परिभाषित
उदाहरण 'जीएचसी' में अंतर्निहित परिभाषित करें।शो '

21

यह विफल रहता है:

map read ["1","2"] 
[*Exception: Prelude.read: no parse 

तरह से यह करने के लिए है:

map (read::String->Int) ["1","2"] 
[1,2] 
:: [Int] 

GHCi के बाहर, में एक .hs फ़ाइल यह होगा:

let intList = map (read::String->Int) ["1","2"] 
संबंधित मुद्दे