リストとリスト内包表記
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/20 02:06 UTC 版)
「Haskell」の記事における「リストとリスト内包表記」の解説
Haskell で順序付けられた複数の値を扱うのにもっとも柔軟で簡潔な方法はリストを用いることである。次は四季の名前のリストである。 ["Spring", "Summer", "Autumn", "Winter"] 次は初項10、公差4の等差数列のリストである。このリストは無限リストであり、その長さは無限大である。 [10, 14..] 次の式は先ほどの数列の先頭20項を要素に持つリストである。take n l はリスト l の先頭 n 個の項を要素に持つリストを返す関数である。 take 20 [10, 14..] もし正格な動作を持つ言語でこのような定義をしようとすると関数 take に値を渡す前に無限リストを生成することになるが、長さが無限のため無限リストの生成が終わることはなく関数 take がいつまでも呼び出されなくなってしまう。Haskell は遅延評価されるため、このようなリストを定義しても必要になるまで必要な項の値の生成は遅延される。このように無限リストを扱えるのは Haskell の大きな強みである。次は素数列をリスト内包表記を用いて定義した一例である。 primes :: [Int] primes = [x | x <- [2..], and [rem x y /= 0 | y <- [2 .. x - 1]]] リストはその柔軟性から再帰的な関数での値の受け渡しに向いているが、任意の位置の要素にアクセスするためには参照を先頭からたどる必要があるのでランダムアクセスが遅い、要素を変更するたびにリストの一部を作り直さなければならないなどの欠点がある。このため Haskell にも配列が用意されており、高速な参照や更新が必要なプログラムではリストの代わりに配列を用いることでパフォーマンスを改善できる可能性がある。
※この「リストとリスト内包表記」の解説は、「Haskell」の解説の一部です。
「リストとリスト内包表記」を含む「Haskell」の記事については、「Haskell」の概要を参照ください。
- リストとリスト内包表記のページへのリンク