2010-12-15 42 views
3

J'ai essayé de faire une version itérative/récursive d'une fonction pour calculer le nombre n e de la suite de Fibonacci, mais je deviens parse error (possibly incorrect indentation). Pourquoi cela arrive-t-il? Le code J'utilise:Parse error dans la mise en œuvre simple, Haskell Fibonacci

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 

Pour être clair, je suis en train de comprendre l'erreur - pourquoi ça se passe, comment elle devrait être corrigée - et ne pas essayer de mettre en œuvre efficacement fib (je comprends le zipWith populaire déjà implémenté here, par exemple).

Merci!

+0

Heureusement, vous avez reçu une bonne réponse rapidement. S'il vous plaît, si vous le pouvez, assurez-vous de dire où le compilateur a placé l'erreur, pas seulement ce que l'erreur est. Une fois de plus, cependant, félicitations pour obtenir une réponse rapide et bonne. – BMeph

Répondre

8

La partie de garde doit être indentée d'au moins un caractère par rapport au nom de la fonction. Ce qui suit fonctionne donc:

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

Aha! Ça devait être quelque chose comme ça, mais je ne savais pas quoi. Merci de votre aide! – Kiwi