0

Haskellを紹介する授業を取っています。私はこの言語にまったく慣れていません。

コンパイルすると、次のように表示されます。

[1 of 1] Compiling Main             ( hw1.hs, interpreted )
hw1.hs:11:1: parse error (possibly incorrect indentation)
Failed, modules loaded: none.

誰かが私が間違ったことを説明できますか? どうもありがとうございました。

psオンラインからコードのスニペット(素数と呼ばれる)を入手しました。私はそのコードを理解していません。ふるいという機能が何をするのかわかりません。組み込みの haskell 関数ですか?

4

2 に答える 2

8

@ertes がバックティックについて述べたことに加えて、さらにいくつかの間違いがあります。幸いなことに、そのうちの 2 つは簡単に修正できます。

まず第一に、letinlet num = [1..]を削除する必要があります: .hs ファイルではこれらは必要ありません (しかし、GHCi では必要なので、最初は混乱するかもしれません)。これがインデントエラーの原因です。それを修正すると、いくつかの型エラーが発生します。

次に、partCpartDに を書きt <- [zip num fibs/primes]ます。これは、tが 1 要素リストの各要素[zip num ...]に順番にバインドされることを意味します。zip num fibs/primesはすでにリストなので、括弧は必要ありません。これを修正した後、プログラムはコンパイルされますが、正しく動作しません。

最後に、数値 (あなたの場合は 、また と ) が素数かフィボナッチ数かを判断しようとする場合fst tpartCそれpartDが の要素であるかどうかを確認するとprimesfibs数値が実際にリストにある場合に機能しますが、うまくいきません。そうでない場合は戻りFalseません。これはelem、検索しているリストが昇順でソートされていることを が認識していないためです。たとえば、評価しようとすると、elem 4 primes4 が 2、3、5、7、11 などと等しいかどうかがチェックされます。elemこれを修正するには、もう少し賢い関数を書く必要があります。

于 2013-01-23T08:40:53.890 に答える
7

11行目でアポストロフィとバックティックを混同しました。

fst t 'elem' primes

する必要があります:

fst t `elem` primes
于 2013-01-23T06:54:07.130 に答える