2013-10-11 1 views
1

왜이 오류가 계속 발생하는지 알 수 있습니까?Haskell 스와핑 목록 요소의 오류

main = do 
print $ check [4,3,2] 0 1 
-- output expected [3,4,2], means just once check and swap not more 

check (modXs, []) _ _ = modXs 
check (modXs, [x]) _ _ = x : modXs 
check (modXs, (x1:x2:xs)) counter limit 
    | x1 > x2 && counter < limit = x2:check (x1 : xs) (counter+1) limit 
    | otherwise = x1 : check (x2 : xs) counter limit 

여기에 오류 메시지가 심지어 해달라고 유형에 대해 뭔가 그것을 이해 말한다 :

Couldn't match expected type `([a1], [a1])' with actual type `[a1]' 
    In the first argument of `check', namely `(x1 : xs)' 
    In the second argument of `(:)', namely 
     `check (x1 : xs) (counter + 1) limit' 
    In the expression: x2 : check (x1 : xs) (counter + 1) limit 
+0

오류를 게시 할 수도 있습니까? 그리고'check'에 타입 시그니처를 포함 할 수 있습니까? – bheklilr

+0

당신이'main'에서 잘못된 인수로 확인을하고있는 것처럼 보입니다. 첫 번째 인수는 튜플이며 목록 만 전달합니다. 또한 check는 순수한 것 같아서,'main = print $ check (something, [4,3,2]) 0 1'을 의미할까요? –

+0

사실 고마워.하지만 여전히 같은 문제 야. – Amir

답변

3

check은 첫 번째 인수로 튜플를 건네 될 것으로 예상; 따라서 maincheck 본문에있는 모든 호출은 튜플을 전달해야합니다.