Haskell 如何将函数应用于向量列表?
我有一个大型嵌套向量,如下所示:Haskell 如何将函数应用于向量列表?,haskell,vector,Haskell,Vector,我有一个大型嵌套向量,如下所示: import Data.Vector let x = fromList [["a", "b", "12", "d"], ["e", "f", "34", "g"]...] let y = Data.Vector.map (\a -> read a :: Int) [i !! 2 | i <- x] > let x = [("a", "b", "12", "d"), ("e", "f", "34", "g")] > map (\(a,
import Data.Vector
let x = fromList [["a", "b", "12", "d"], ["e", "f", "34", "g"]...]
let y = Data.Vector.map (\a -> read a :: Int) [i !! 2 | i <- x]
> let x = [("a", "b", "12", "d"), ("e", "f", "34", "g")]
> map (\(a, b, c, d) -> (a, b, read c :: Int, d)) x
[("a", "b", 12, "d"), ("e", "f", 34, "g")]
我想将字符串转换为每个嵌套列表中位置2处的整数,我正试图用map和类似的理解来实现这一点:
import Data.Vector
let x = fromList [["a", "b", "12", "d"], ["e", "f", "34", "g"]...]
let y = Data.Vector.map (\a -> read a :: Int) [i !! 2 | i <- x]
> let x = [("a", "b", "12", "d"), ("e", "f", "34", "g")]
> map (\(a, b, c, d) -> (a, b, read c :: Int, d)) x
[("a", "b", 12, "d"), ("e", "f", 34, "g")]
这里有很多问题 首先,列表理解的结果是一个列表,因此在列表上调用
Data.Vector.map
,这是行不通的。理解中的x
是一个向量,这是另一种类型的不匹配。使用列表而不是向量(以及Prelude.map
),或者将列表转换为向量(在这种情况下,您不能使用列表)
其次,忽略list/Vector
问题,[i!!2 | i看起来您应该使用比4元组更复杂的数据类型,如
data YourType_StringNum = YourType_StringNum { ytsnLetters1 :: String
, ytsnLetters2 :: String
, ytsnNumber :: String
, ytsnLetters3 :: String }
data YourType_IntNum = YourType_IntNum { ytinLetters1 :: String
, ytinLetters2 :: String
, ytinNumber :: Int
, ytinLetters3 :: String }
(当然有更好的标识符)
toYtin :: YourType_StringNum -> YourType_IntNum
toYtin(YourType_StringNum a b s c) = YourType_IntNum a b (read s) c
这样一来,您的问题就简化为将向量YourType\u StringNum
转换为向量YourType\u IntNum
,而这只需对Data.Vector.map toYtin
结果的类型是什么?类型应该是一个嵌套的元组。因此,如果任何ys的长度xs/=4
,会发生什么情况de>在x
中?也许您应该从4元组的向量开始。