如何反转 Haskell 中的元组
How do I reverse a tuple in Haskell
我无法弄清楚如何反转元组,下面是我的代码:
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])]
我尝试使用排序。 reverse 我在这篇文章中找到但我不知道如何
https://codegolf.stackexchange.com/questions/3571/descending-sort-using-standard-ascending-sort-function
我以前使用过 sortby(compare 'on' snd) 函数,但在我的脑海中尝试将其更改为反向并不容易。
我对 Haskell 比较陌生,如果这是一个愚蠢的问题,我很抱歉。在普通列表上真的很容易做到,但我无法想象如何在元组上做到这一点。
提前致谢!
正如您自己所说,您需要使用 reverse 功能。无论您在何处使用代码来形成元组列表,请使用方括号 (reverse(code))
或 reverse $ <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])]
我尝试使用排序。 reverse 我在这篇文章中找到但我不知道如何 https://codegolf.stackexchange.com/questions/3571/descending-sort-using-standard-ascending-sort-function
我以前使用过 sortby(compare 'on' snd) 函数,但在我的脑海中尝试将其更改为反向并不容易。
我对 Haskell 比较陌生,如果这是一个愚蠢的问题,我很抱歉。在普通列表上真的很容易做到,但我无法想象如何在元组上做到这一点。
提前致谢!
正如您自己所说,您需要使用 reverse 功能。无论您在何处使用代码来形成元组列表,请使用方括号 (reverse(code))
或 reverse $ <code>
将该代码封装在反向函数中,结果将是相反的。
希望对您有所帮助!