2017-08-07 76 views
-4

我剛開始使用Haskell。我讀到,我們可以用[0 ..]生成正數自然數的無限列表,並試用了它。在Haskell中刪除無限列表

但是,現在我無法回到我的文件的開始。我已經刪除了很多數字,但是我怎樣才能擺脫這個無限的數字列表?

+5

你是什麼意思?您無法從無限列表中刪除數字。在Haskell中數據是不可變的... –

+0

我不明白你的問題,你可以請schow yuor代碼嗎? – epsilonhalbe

+0

我輸入了[0 ..]。如何刪除通過輸入[0 ..]生成的所有數字? –

回答

1

這與Haskell和GHCi無關,它與OS shell的工作方式有關。當您執行無限列表的打印時,您指示計算機繼續在屏幕緩衝區中放入更多字節。那些容量有限,並最終會丟失以前的命令放在那裏的數據。

爲了避免將來出現這種情況,請將命令的輸出重定向到文本文件,然後從保存的文件中運行代碼,而不是GHCi。

+0

謝謝你的回答。不幸的是,我不具備您的答案中的某些術語的基本知識,使我能夠理解它,但也許這隨着事情的發展而改變。 :) –

+1

試圖寫一個無限的字符串到一個文件並不完全是一個富有成效的活動要麼...當然,在這個過程死後,你會保留從一開始的所有輸入,但該文件可能會有幾GB ,大多數文本編輯器只會窒息而已。當你知道一個列表是無限的時候,檢查它的一個更好的方法是'取'列表的前綴(例如'take 10 [0 ..]')。 – user2407038

+1

@ user2407038當然,我的建議更多的是關於輸出的未知大小,以及如何保護自己免受它的影響。如果你寫這樣一個文件,那麼你可以安全地檢查它的大小並丟棄它的內容,如果你意識到你的程序陷入了無限循環。還有很多工具可以按塊讀取這些文件,而無需將它們全部加載到內存中。 –