2009-05-28 187 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"]