Haskell 将字符串列表转换为整型列表
我有一个字符串列表,是否可以将其转换为整数列表?Haskell 将字符串列表转换为整型列表,haskell,functional-programming,casting,Haskell,Functional Programming,Casting,我有一个字符串列表,是否可以将其转换为整数列表? 例如: 嗯 否?这些问题的一般答案是将任务分成几个部分:[String]->[Int]看起来像是和的组合。Hoogle(链接)会给你一些结果,让我们看看 $hoogle'字符串->整数' Test.HUnit.Base标签::字符串->节点 前奏曲错误::[Char]->a 前奏曲长度::[a]->Int 数据列表长度::[a]->Int Data.Char digitToInt::Char->Int Data.Char ord::Char->I
例如: 嗯
否?这些问题的一般答案是将任务分成几个部分:
[String]->[Int]
看起来像是和的组合。Hoogle(链接)会给你一些结果,让我们看看
$hoogle'字符串->整数'Test.HUnit.Base标签::字符串->节点
前奏曲错误::[Char]->a
前奏曲长度::[a]->Int
数据列表长度::[a]->Int
Data.Char digitToInt::Char->Int
Data.Char ord::Char->Int
Debug.Trace Trace::String->a->a
Network.BufferType buf_fromStr::BufferOp a->String->a
Network.Socket send::Socket->String->IO Int
Graphics.UI.GLUT.Callbacks.Window Char::Char->Key
前奏曲阅读::阅读a=>String->a
Text.Read Read::Read a=>String->a
Data.String fromString::IsString a=>String->a
GHC.Exts fromString::IsString a=>String->a
Control.Monad.Trans.Error strMsg::Error a=>String->a
Control.Monad.Error.Class strMsg::Error a=>String->a
啊,很多垃圾。我们可以先从与您无关的软件包中删除这些 前奏曲错误::[Char]->a
前奏曲长度::[a]->Int
数据列表长度::[a]->Int
Data.Char digitToInt::Char->Int
Data.Char ord::Char->Int
前奏曲阅读::阅读a=>String->a
Text.Read Read::Read a=>String->a
Data.String fromString::IsString a=>String->a
Text.Printf Printf::PrintfType r=>String->r
错误
听起来和你想要的不太一样<代码>长度两者都不是<代码>数码点?听起来有点正确——事实上是可行的,但只适用于单个数字<代码>读取?也许不是您所期望的名称,但如果您仔细想想,这是正确的:将字符串转换为更有意义的内容(如数字)就像阅读一些文本
对,在另一边,胡格尔给了我们想要的东西:
$hoogle'[a]->[b]'前奏图::(a->b)->[a]->[b]
数据列表映射::(a->b)->[a]->[b]
前奏合奏图::(a->[b])->[a]->[b]
数据列表concatMap::(a->[b])->[a]->[b]
数据。mamamamaybay::(a->Maybe)->[a]->[b]
序曲循环::[a]->[a]
数据列表周期::[a]->[a]
序曲起始::[a]->[a]
数据列表初始化::[a]->[a]
前奏曲反面::[a]->[a]
正如您所看到的,这些函数中的大多数被称为带有“map”的函数,这可能不是您所期望的名称,但显然这就是这个操作的名称!你要找的是最简单的 最后,我们需要将这两个功能结合起来
map
需要另一个函数作为其第一个参数–很明显,这就是read
then!因此,您只需将map
应用于read
。下一个参数是[a]
s的列表:啊哈,我们已经完成了
您可以通过启动ghci来检查这一点:
序曲>:t地图读取映射读取::读取b=>[String]->[b] 这里仍然有这个
b
,而不是Int
,但不要介意:b
可以是您想要的任何类型前提是它有一个Read
实例<代码>整数具有:
序曲>:i Intdata Int=GHC.Types.I#GHC.Prim.Int#——在“GHC.Types”中定义
实例有界整数——在“GHC.Enum”中定义
实例枚举Int——在“GHC.Enum”中定义
实例Eq Int——在“GHC.Classes”中定义
实例整数Int——在“GHC.Real”中定义
实例Num Int——在“GHC.Num”中定义
实例Ord Int——在“GHC.Classes”中定义
实例Read Int——在“GHC.Read”中定义
实例Real Int——在“GHC.Real”中定义
实例Show Int——在“GHC.Show”中定义
这失败了:
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"]
我知道我这次谈话有点晚了,但也可以这样做:
map read[“1”,“2”]:[Int]
map (read::String->Int) ["1","2"]
[1,2]
:: [Int]
let intList = map (read::String->Int) ["1","2"]