Haskell 中的元组函数
Tuple function in Haskell
我有这个功能
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate)`
我预计
getCode [(‘a’,4),(‘b’,1),(‘a’,3),(‘b’,1)]
输出
“aaaabaaab”
相反,我得到一个错误,它与预期的数据类型 [(a,Int)]
不匹配,而实际数据类型是 [(Int,a)]
。我如何更改它以使其工作?或者其他方式?
您可以将 replicate
的参数与 flip
函数交换:
flip :: (a -> b -> c) -> b -> a -> c
flip f
takes its (first) two arguments in the reverse order of f
.
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry (flip replicate))
或者使用 Data.Tuple
中的 swap
用元组而不是函数参数做同样的事情:
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate . swap)
我有这个功能
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate)`
我预计
getCode [(‘a’,4),(‘b’,1),(‘a’,3),(‘b’,1)]
输出
“aaaabaaab”
相反,我得到一个错误,它与预期的数据类型 [(a,Int)]
不匹配,而实际数据类型是 [(Int,a)]
。我如何更改它以使其工作?或者其他方式?
您可以将 replicate
的参数与 flip
函数交换:
flip :: (a -> b -> c) -> b -> a -> c
flip f
takes its (first) two arguments in the reverse order off
.
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry (flip replicate))
或者使用 Data.Tuple
中的 swap
用元组而不是函数参数做同样的事情:
getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate . swap)