2009-05-28 189 views

回答

38

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

沒有?

+0

它確實工作! :) tnx – pier 2009-05-28 09:42:37

2

這些問題的一般答案是將任務分成幾部分:[String] -> [Int]看起來像是String -> Int[a] -> [b]的組合。 Hoogle(鏈接)會給你一些結果雙方,讓我們來看看......

$ hoogle '字符串 - >詮釋'
Test.HUnit.Base標籤::字符串 - >節點
前奏錯誤: :[字符] - >一個
前奏長度:: [A] - >內部
長度Data.List模塊:: [A] - >內部
Data.Char digitToInt ::字符 - >內部
Data.Char ord :: Char - > Int
Debug.Trace trace :: String - > a - > a
Network.Buf ferType buf_fromStr :: BufferOp一個 - >字符串 - >一
Network.Socket發送::插座 - >字符串 - > IO詮釋
Graphics.UI.GLUT.Callbacks.Window字符::字符 - >重點
前奏讀::閱讀=>字符串 - >一個
Text.Read讀::閱讀=>字符串 - >一個
Data.String fromString :: IsString A =>字符串 - >一個
GHC.Exts fromString :: IsString A =>字符串 - >一個
Control.Monad.Trans.Error strMsg ::錯誤A =>字符串 - >一個
Control.Monad.Error.Class strMsg ::錯誤A =>字符串 - >一個
。 ..

呃,很多垃圾。我們可以先消除那些包,你什麼都沒有做......

前奏錯誤:: [字符] - >一個
前奏長度:: [A] - >詮釋
長度Data.List模塊:: [A] - >內部
Data.Char digitToInt ::字符 - >內部
Data.Char ORD ::字符 - >內部
前奏讀::閱讀=>字符串 - >一個
文本。閱讀:閱讀a =>字符串 - > a
Data.String fromString :: IsString a => String - > a
Text.Printf的printf :: PrintfType R =>字符串 - > [R

error聽起來像幾乎你想要什麼。 length都沒有。 digitToInt?聽起來是對的 - 實際上是有效的,但只有一位數字。 read?也許不是你想要的名字,但是如果你想一想,這是正確的:將字符串轉換爲更有意義的東西(如數字)就像閱讀一些文本。

權,另一邊Hoogle給了我們,我們要擺在最前頭的東西:

$ hoogle '[A] - > [B]'
前奏地圖::(甲 - >乙) - > [a] - > [b]
Data.List map ::(a - > b) - > [a] - > [b]
Prelude concatMap ::(a - > [b]) - Data.List concatMap ::(a - > [b]) - > [a] - > [b]
Data.Maybe mapMaybe ::(a - >也許b) - > [a] - > [b]
Prelude cycl Data ::List :: [a]
Prelude init :: [a] - > [a]
Data.List init :: [ A] - > [A]
前奏反向:: [A] - > [A]

正如你所看到的大多數調用這些功能用的東西 「地圖」,這可能會再次不能作爲名稱你的預期 - 但顯然這就是這個操作被稱爲!你正在尋找的是最簡單的。

最後,我們需要結合這兩個功能。 map需要另一個功能作爲它的第一個參數 - 嗯,那明顯是read那麼!所以你只需申請mapread。下一個參數是[a] s的列表:aha,我們已經完成了!

前奏>:

您可以通過啓動了ghci中檢查這件T地圖閱讀
地圖閱讀::查看B => [字符串] - > [B]

有仍然這b在這裏而不是Int,但沒關係:b可以是你想要的任何類型! - 只要它有一個Read實例。 Int具有:

前奏>:I INT
數據INT = GHC.Types.I#GHC.Prim.Int# - 在`GHC.Types'
實例有界詮釋定義 - 定義在` GHC.Enum '
實例枚舉詮釋 - 定義在`GHC.Enum'
例如公式詮釋 - 定義在`GHC.Classes'
例如積分詮釋 - 在'GHC.Real定義」
實例民Int - 定義於'GHC.Num'
實例Ord Int - 定義於'GHC.Classes'
實例讀取Int - 在'GHC.Read'中定義
實例Real Int - 在`GHC.Real'中定義的
實例在GHC中顯示Int-Defined。展會」

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"]