2015-01-05 6 views
1

내가 아래에있는 내 코드, 튜플을 반대하는 방법을 알아내는 데 문제가 오전에 튜플 역 어떻게 :나는 하스켈

HTree는 지능 (캐릭터에서 발생의 빈도로 정의된다
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 :) 

문자열)와 숯불 문자열에서 :

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

및 HCodeMap은 : 샤아가 characte가

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

인 경우 나무와 [비트]에서 R은 다음과 같습니다

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) 함수를 사용했지만이를 역으로 변경하려고 시도하는 것이 쉽지 않습니다. 내 머리.

저는 하스켈이 처음인데, 어리석은 질문이라면 유감입니다. 그냥 정상적인 목록에서 할 정말 쉽지만 튜플에서 어떻게 그것을 시각화 할 수 없습니다.

미리 감사드립니다.

+0

'\ xs -> let (a, b) = zip에서 xs 압축 풀기 (역 b)' – user2407038

답변

1

자신이 말했듯이 reverse 기능을 사용해야합니다. 튜플 목록을 구성하는 코드가있는 곳에서는 대괄호 (reverse(code)) 또는 reverse $ <code>을 사용하여 그 코드를 역순으로 캡슐화하면 그 결과가 거꾸로됩니다.

희망이 도움이됩니다.