【问题标题】:How do I reverse a tuple in Haskell如何在 Haskell 中反转元组
【发布时间】:2015-01-05 22:04:10
【问题描述】:

我无法弄清楚如何反转元组,下面是我的代码:

extractCode :: HTree -> HCodeMap 
extractCode t = extractCodeInner t []
  where extractCodeInner (Leaf _ c) bits = [(c, [])]
        extractCodeInner (Branch _ left right) bits = map (addBit Zero) (extractCode left ) ++ map (addBit One) (extractCode right)
        where addBit b = second $ ( b : )

其中 HTree 定义为 Int(字符串中字符出现的频率)和字符串中的 Char:

data HTree = Branch Int HTree HTree | Leaf Int Char 
             deriving (Show, Eq)

而 HCodeMap 是:

type HCodeMap = [(Char, [Bit])]

其中 Char 是树中的一个字符,而 [Bit] 是:

data Bit = Zero | One deriving (Show, Eq)

现在当我传递字符串“aaabbc”的树时

我明白了:

[('c',[Zero, Zero]),('b',[Zero, One]),('a',[One])]

我想做的是将圆括号列表()中的所有项目反转,使其看起来像这样:

[('a',[One]),('b',[Zero, One]),('c',[Zero, Zero])]

我尝试使用 sort 。反向我在这篇文章中找到,但我不知道如何 https://codegolf.stackexchange.com/questions/3571/descending-sort-using-standard-ascending-sort-function

我之前使用了一个 sortby(compare 'on' snd) 函数,但试图将其更改为 reverse 在我的脑海中并不容易解决。

我对 Haskell 比较陌生,所以如果这是一个愚蠢的问题,我很抱歉。在普通列表上真的很容易做到,但我无法想象如何在元组上做到这一点。

提前谢谢你!

【问题讨论】:

  • \xs -> let (a,b) = unzip xs in zip a (reverse b)

标签: haskell tuples reverse huffman-code


【解决方案1】:

正如您自己所说,您需要使用reverse 函数。无论您的代码在哪里形成元组列表,都可以使用括号 (reverse(code))reverse $ <code> 将该代码封装在反向函数中,结果将是相反的。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多