2017-08-07 15 views
-4

私はちょうどハスケルを使い始めました。 [0 ..]で無限の自然数のリストを生成できることを読んで試しました。ハスケルで無限リストを削除する

ただし、ファイルの先頭に戻ることはできません。私は数字の多くを削除しましたが、この無限の数字のリストをどうやって取り除くことができますか?

+5

どういう意味ですか?無限リストから数値を削除することはできません。データはHaskellで不変です... –

+0

私はあなたの質問を理解していない、あなたはschowのyuorコードをしてくださいできますか? – epsilonhalbe

+0

私は[0 ..]とタイプしました。 [0 ..]と入力して生成された数字をすべて削除するにはどうすればよいですか? –

答えて

1

これはHaskellやGHCiとは無関係であり、OSシェルの仕組みとはさらに関係があります。無限リストの印刷を実行すると、コンピュータは画面バッファに多くのバイトを入れておくように指示しました。これらは容量が限られており、最終的には前のコマンドでそこに入れられたデータを失うことになります。

今後の状況を回避するには、コマンドの出力をテキストファイルにリダイレクトし、GHCiではなく保存されたファイルからコードを実行してください。

+0

あなたの答えをありがとう。残念ながら、私はあなたの答えにある特定の用語についての基本的な知識は持っていません。私はそれを理解することができますが、物事が進むにつれて変わるかもしれません。 :) –

+1

ファイルに無限の文字列を書き込もうとするのはまったく効果的ではありません...確かに、プロセスが終了すると、最初からすべての入力を保持しますが、ファイルのサイズは数GBになりますたいていのテキストエディタはそれを黙らせます。リストが無限であることが分かっている場合、それを調べるより良い方法はリストの接頭辞を 'take 'することです(例えば、' take 10 [0 ..] ')。 – user2407038

+1

@ user2407038確かに、私の提案は、アウトプットのサイズが不明で、それに対して自分を守る方法についてのものでした。そのようなファイルを作成すると、プログラムが無限ループに陥ったことが分かったら、そのファイルのサイズを調べてその内容を破棄することができます。このようなファイルをチャンクで読み取って、メモリ全体にロードすることなく読み取ることができるツールも数多くあります。 –

関連する問題