2017-05-04 5 views
1

에서 튜플 기능은 내가하스켈

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

출력에 기대

“aaaabaaab” 

대신 내가이 예상 데이터와 일치하지 않는 오류가 발생

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

기능을 가지고 [(a,Int)]을 입력하고 실제 데이터 형식은 [(Int,a)]입니다. 어떻게 작동하도록 변경합니까? 아니면 다른 방법일까요?

답변

1

당신은 flip 기능 replicate의 매개 변수를 교체 할 수 있습니다 :

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

flip ff의 역순으로 그 (첫번째) 2 개 개의 인수를 취하는.


또는 대신 함수 매개 변수의 튜플과 같은 일을 Data.Tuple에서 swap을 사용

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

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

감사합니다. 나는'역전 '기능을 생각하고 있었다. – BCKN

+0

@BCKN'reverse'는리스트를위한 것이지만,'swap'은 튜플에 대해 작동 할 것입니다. 메모리 조깅 주셔서 감사합니다;) – 4castle