Haskellでは、有限リストを連結した無限リストの最後のアイテムを効率的に取得する方法を教えてください。ハスケルで有限リストを連結した無限リストの最後のアイテムを取得するには?
last
は動作しません。頭から、それは明らかに反復し、以下が終了したことがないので:
-- let's have a list of all natural numbers,
-- with zero appended
arr = [1..] ++ [0]
-- it was fast! now get the last item, should be easy
res = last arr
EDIT:私は[1..] ++ [0]
のHaskellの内部表現であるのだろうか、それは完全に「最初にあるの未評価 "? 内部でが2つの(評価されていない)リストの "シーケンス"のように表す場合、last
関数は最後の項目の最後の項目をただちに取得できます。
有限リストと連結された無限リストは、最初のリストが無限であるのと同じように無限大です。リストは序数ではなく、そこには無限の種類はありません。 '[1 ..] ++ [0]'には最後の要素はありません。 –
私は質問をしている理由を明らかにする眠気を追加しています。 – mykhal
この質問に関連するすべての情報を質問自体に追加してください。 –