2010-12-15 8 views
3

フィボナッチシーケンスの n番目の数値を計算する関数の反復/テール再帰バージョンを作成しようとしましたが、私はparse error (possibly incorrect indentation)を取得しています。なぜこうなった?私が使用しているコード:私は人気を理解する(かつ効率的にfibを実装しようとしていないzipWith - - なぜ修正されなければならないか、起こって単純な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 

を明確にするためには、私はエラーを理解しようとしています例えば、hereの実装は既に存在します)。

ありがとうございます!

+0

ありがたいことに、あなたはすぐに良い答えを受け取りました。可能であれば、コンパイラがエラーをどこに配置したのか、エラーの内容だけでなく、必ず伝えてください。しかしもう一度、速く、良い答えを得ることをおめでとう。 – BMeph

答えて

8

ガード部分は、関数名に対して少なくとも1文字インデントしなければなりません。次のように動作します:

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!そのようなものでなければならなかったが、私は何がわからなかった。ご協力いただきありがとうございます! – Kiwi