2016-10-21 5 views
1

나는 GHCi 콘솔을 실행하고 콘솔이 중지간단한 하스켈 피보나치 기능은

fib 0 = 0 
fib 1 = 1 
fib n = fib (n-1) + fib (n-2) 

다음

fib 5 

과를 입력하고 붙어과 함께 사망 도착 :

: 아웃 of memory

내가 뭘 잘못 했니?

답변

2

콘솔에서 하나의 기능을 정의하지 않았습니다. fib 3 가지 사례가 있습니다. 먼저 fib 0 = 0을 정의한 다음 함수 fib 1 = 1으로 덮어 쓰고 마지막으로 기본 케이스가없는 fib n = fib (n-1) + fib (n-2)이라는 세 번째 함수로 덮어 씁니다.

> fib 0 = 1; fib 1 = 1; fib n = fib (n-1) + fib (n-2) 

을 사용하면 단일 3 가지 기능을 올바르게 정의 할 수 있습니다.

> let fib 0 = 0 
> fib 1 = 1 

<interactive>:3:7: parse error on input '=' 
:이 이전 버전에서 당신이 정의를 시작 let를 사용해야하고, 두 번째 줄에 구문 분석 오류를 얻을 것이기 때문에, GHCi 8로 시작하는 주로 문제가

2

선언을 ghci에 별도로 입력하면 각각은 fib이라는 별개의 정의로 읽히며 선행자를 섀도 잉합니다. 즉, 효과적으로이 문제를 방지하려면

fib n = fib (n-1) + fib (n-2) 
fib 5 -- infinite recursion here 

가장 쉬운 방법을 실행하는 것은 파일에 fib의 정의를 넣어하는 것입니다.