【问题标题】:Tuple function in HaskellHaskell 中的元组函数
【发布时间】:2017-05-04 01:32:25
【问题描述】:

我有这个功能

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

我期待

getCode [(‘a’,4),(‘b’,1),(‘a’,3),(‘b’,1)]

输出

“aaaabaaab” 

相反,我得到一个错误,它与预期的数据类型[(a,Int)] 不匹配,而实际的数据类型是[(Int,a)]。我如何改变它以使其工作?还是其他方式?

【问题讨论】:

    标签: list haskell tuples higher-order-functions


    【解决方案1】:

    你可以用flip函数交换replicate的参数:

    flip :: (a -> b -> c) -> b -> a -> c
    

    flip ff 的相反顺序获取其(第一个)两个参数。

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

    或者使用 Data.Tuple 中的 swap 用元组而不是函数参数来做同样的事情:

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

    【讨论】:

    • 感谢您的帮助。我在想reverse 函数。
    • @BCKN reverse 适用于列表,但 swap 适用于元组。感谢您的记忆慢跑;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多