2009-11-08 4 views
1

하스켈 추가 함수를 작성하려고 해요 ... 여기에 내가 가지고있는 것 :Haskell Noob 질문 : 추가 기능에 어떤 문제가 있습니까?

myappend :: [a] -> [a] -> [a] 
myappend [] x = x 
myappend [x:xs] y = x : myappend xs y 

그러나 나에게 오류가 발생했습니다 : 확인 : 발생합니다 무한 형식 : a = [a] 때 `myappend '에 대한 타입을 일반화한다.

분명히 뭔가 잘못되었지만 나는 그것을 볼 수 없다 ... 나의 추가 기능에는 어떤 문제가 있는가?

답변

13

생성자는 [A]입니다

그래서, 당신은 사용해야합니다

myappend :: [a] -> [a] -> [a] 
myappend [] x = x 
myappend (x:xs) y = x : myappend xs y 

구문

[x:xs] 

에 거의 동일합니다
[(x:xs)] 
하나 개의 요소, 비어 있지 않은 목록과 목록과 일치하고, 생성자 및 패턴 매칭 개념을 이해하려면 내가 this page을 읽어 보시기 바랍니다

[(x:xs)] :: [[a]] 

입력이

.

+0

아하! 어리석은 대괄호. 나는 그것을 지금 본다! 나는 무엇을 생각하고 있었느냐!? 감사! –

1

myappend (x:xs) y = x : (myappend xs y)

[1,2,3]1:2:3:[]에 더 [] 브라켓이 없을 것 같은 목록을 정의하는 여러 가지 방법이 있습니다. [x:xs]은 다른 목록으로 구성된 하나의 항목 목록과 일치합니다. 유형의

4

함수의 두 번째 경우의 패턴은 단지 (x:xs)하지 [x:xs]해야한다 :

myappend (x:xs) y = x : myappend xs y 

x:xs는 목록에 다음 요소를 일치 괄호는 구문 분명히 무슨 일이 속하는 만들기 위해 단지있다 그 패턴. [x:xs]x:xs을 포함하는 목록과 일치합니다.

관련 문제