list - Haskell 中的元组函数

标签 list haskell tuples higher-order-functions

我有这个功能

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))

或者使用swap来自 Data.Tuple 使用元组而不是函数参数执行相同的操作:

getCode :: [(a, Int)] -> [a]
getCode = concatMap (uncurry replicate . swap)

关于list - Haskell 中的元组函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772440/

相关文章:

python - 复制列表错误Python(康威生命游戏的一部分)

haskell - 使用 lambda 作为 "foldr"的运算符

haskell - 获取 X11 Haskell 库中的事件窗口标题

c++ - 将 int 元组转换为 int 并返回

c# - 使用元组快速内存

python - 如何用元组划分元组

c# - 如何获取列表中字符串的平均出现次数

Python:如何倒计时一个数字,并将倒计时 append 到列表中

python - 使用 groupby 的列的累积列表

Haskell 设置数据类型/数据结构