2010-12-15 6 views
3

나는 피보나치 시퀀스의 N 번째 수를 계산하는 기능의 반복적 인/꼬리 재귀 버전을 만들려고했지만, 나는 parse error (possibly incorrect indentation)을 얻고있다. 왜 이런 일이 일어나는 걸까요? 내가 사용하고 코드 : - 왜이 수정되어야하는지, 무슨 일이 일어나고 -구문 분석 오류가

fib n 
    | n < 2 = n 
    | otherwise = fibhelper 0 1 2 n 
    where fibhelper a b curr num 
      | curr == num = a + b 
      | curr < num = fibhelper b (a+b) (curr+1) num 

이 명확하게하기 위해, 나는 오류를 이해하려고 노력 중이 야하고 효율적으로 fib을 구현하기 위해 노력하지 않고 (I 인기 zipWith을 이해 implementation here 이미 예를 들어).

감사합니다.

+0

다행히도 좋은 답변을 신속하게 받았습니다. 가능한 경우 오류가 아닌 컴파일러가 오류를 배치 한 위치를 말하십시오. 한 번 더, 그래도, 빠르고, 좋은 대답을 받고 축하해. – BMeph

답변

8

가드 부분은 함수 이름과 관련하여 적어도 하나의 문자만큼 들여 쓰기되어야합니다. 따라서 다음과 같이 작동합니다.

fib n 
    | n < 2 = n 
    | otherwise = fibhelper 0 1 2 n 
    where fibhelper a b curr num 
      | curr == num = a + b -- moved one character to the left. 
      | curr < num = fibhelper b (a+b) (curr+1) num 
+0

아하! 그와 비슷한 것이어야했지만 무엇이 확실하지 않았습니다. 당신의 도움을 주셔서 감사합니다! – Kiwi