2014-05-03 3 views
0

Я только что начал использовать интерпретатор Haskell.Haskell - ошибка синтаксического анализа на входе

Может кто-нибудь сказать мне, что случилось с этим кодом: (для Фибоначчи)

fib :: Int -> Int 
fib n 
|n==0 =0 
|n==1 =1 
|n>1 =fib(n-2) + fib(n-1) 

Я получаю сообщение об ошибке:

fib.hs:3:1: parse error on input `|' 
[1 of 1] Compiling Main    (fib.hs, interpreted) 
Failed, modules loaded: none. 

ответ

1

Вы должны отступом следующие строки, по крайней мере, одно пространство, например:

fib :: Int -> Int 
fib n 
|n==0 =0 
|n==1 =1 
|n>1 =fib(n-2) + fib(n-1) 
4

Haskell является отступы чувствительным. В частности | «s необходимости отступ дальше, чем имя функции:

fib :: Int -> Int 
fib n 
    |n==0 =0 
    |n==1 =1 
    |n>1 =fib(n-2) + fib(n-1) 

Кроме того, это более идиоматическое использовать сопоставление с образцом для сравнения с константой:

fib :: Int -> Int 
fib 0 =0 
fib 1 =1 
fib n 
    |n>1 =fib(n-2) + fib(n-1) 
+0

Нужна ли нам охрана в последнем объявлении? – ssm

+0

@ssm Не строго, но это дает более быструю ошибку при попытках вызвать ее с отрицательными числами. Я действительно оставил его, потому что он был в оригинале. –

Смежные вопросы