如何在Haskell中反转元组

时间:2015-01-05 22:04:10

标签: haskell tuples reverse huffman-code

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

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

我尝试使用排序。我在这篇文章中发现反向,但我不确定如何 https://codegolf.stackexchange.com/questions/3571/descending-sort-using-standard-ascending-sort-function

我之前使用过sortby(比较'on'snd)函数,但是尝试将其更改为反转并不是那么容易在我脑海中完成。

我对Haskell比较新,所以如果这是一个愚蠢的问题,我很抱歉。它在普通列表上真的很容易,但我无法想象我将如何在元组上进行操作。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

正如您自己所说,您需要使用reverse功能。只要您的代码形成元组列表,就可以使用括号(reverse(code))reverse $ <code>将该代码封装在反向函数中,结果将反过来。

希望这有帮助!

相关问题