2016-12-17 3 views
1

私はPE問題に取り組んでおり、素数のリストが必要です。だから私は物事にHaskellの方法を行うので、同様に、素数の無限のリストを定義します。私には非常に高速に見えたプログラムは、小さな数字に永遠に取っていた、なぜ私が思っていたhaskell - takeWhileは素数の無限リストが与えられたときにハングします

primes = 1 : 2 : filter isPrime [3,5..] 

。それで、私はこれを試しました:

リストの印刷も完了していないだけです。私は数ヶ月(私はLispの世界から来た)ハスケルとしか作業していないので、これはちょっとばかげた初心者の間違いであると確信しています。

ありがとうございます!

+2

'isPrime'関数は、定義にない素数として1を含んでいるので、思った通りに動作していないと思います。 – Ingo

+1

を使用するとうまく動作するためです。 'filter isPrime'の代わりに' filter(> 5) 'を呼び出すと、問題は' isPrime'関数 – E4z9

+1

ああです。あなたが正しい。常にfalseを返します。笑 –

答えて

0

どちらもtakeWhileでもfilterでも引数については何も分かりません。 filterは、無限リストを生成しないことを知らずに無限リストの要素にisPrimeを適用し続けます。takeWhileは、filterが10以上の値を返さないことを知らずに、さらに値を求め続けます

解決策はもちろん、isPrimeの正しい定義を提供することです。

関連する問題