2

次の構文で厄介な構文エラーが発生します。

isPrime n = if numOfDivisors n == 0 then True else False            
    where numOfDivisors n = length $ [x | x <- [2..ceiling (sqrt n)], n `mod` x == 0]

どうすれば修正できますか?私はHaskellを初めて使用するので、の何が問題なのかわかりません[2..ceiling (sqrt n)]

ありがとう(私の貧しい脳のために申し訳ありません)。

4

1 に答える 1

10

sqrtとの両方を使用modしています。n前者は浮動小数点型を必要とし、後者は整数型を必要とします。おそらく後者が必要で、sqrt (fromIntegral n)代わりに使用します。

その他の一方的なアドバイス:

  • する理由はありませんif foo then True else False。ブール式のみを使用してください。

  • 関数の引数はwhere句のスコープ内にあるため、引数としてはnumOfDivisors必要ありませんn

  • lengthリストが空かどうかを確認するために使用しないでください。null代わりに除数のリストで使用してください。

于 2012-12-20T21:51:19.047 に答える