Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 将字符串列表转换为整型列表_Haskell_Functional Programming_Casting - Fatal编程技术网

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