Haskell-リスト

リストとは

haskellにおけるリストとは、配列の様な物であり、要素の並びをひとまとまりにしたものです。

リストの中は同じ型の要素のみを扱います。異なる型要素は格納できません。

リストの形式は[ ]で囲み、「,(comma)」で区切ります。


[要素, 要素, 要素]

リストの生成

要素を指定してリストを作成する。


Prelude> ["one", "two", "three"]
["one","two","three"]

指定した範囲の整数の数列を作る。


Prelude> [3..10]
[3,4,5,6,7,8,9,10]

一定の間隔の整数の数列を作る。


Prelude> [1,3..10]
[1,3,5,7,9]

無限リストの作成

Haskellでは無限に続くリストを扱う事ができます。

式に無限リストが含まれていても、必要なリストだけを求め、解を得る事ができます。


$ cat list.hs 
#!/usr/bin/env runghc

-- 奇数リストから8番目の要素まで表示する。 
num_list = [1,3..]
main = print( take 8 num_list )

$ ./list.hs 
[1,3,5,7,9,11,13,15]

内包表記

要素を計算によって作成してリストを生成します。


[要素 | 条件式]

条件式に記述できるものは以下の通りです。

  • パターン <- リスト
  • 真偽式
  • let パターン = 式

例えば、100以下の偶数リストは生成する場合は以下の通りです。


[x | x <- [1..100], x `mod` 2 == 0]

引数の要素 n 個からなるリスト作成。

同一要素のリストを作成します。


Prelude> replicate 5 3
[3,3,3,3,3]

リスト要素の取得

リストの n 番目の値を取り出す。

リストの先頭は0番となります。


Prelude>  [1,2,3,4,5] !! 2
3

リストの長さを取得する。


Prelude>  length [1,2,3,4,5]
5

リストの先頭要素を取り出す。


Prelude> head [1,2,3,4,5]
1

リストの最終要素を取り出す。


Prelude> last [1,2,3,4,5]
5

先頭要素を除いた値を取り出す。


Prelude> tail [1,2,3,4,5]
[2,3,4,5]

最終要素を除いた値を取り出す。


Prelude> init [1,2,3,4,5]
[1,2,3,4]

先頭から n 個の要素を取り出す。


Prelude> take 3 [1,2,3,4,5]
[1,2,3]

条件に合う要素を取り出す。

リストの先頭から取得していきます。


Prelude> takeWhile (<=3) [1,2,3,4,5]
[1,2,3]

先頭から n 個の要素を除いたリストを取り出す。


Prelude> drop 3 [1,2,3,4,5]
[4,5]

条件に合わない要素を取り出す。


Prelude> dropWhile (<3) [1,2,3,4,5]
[3,4,5]

リスト要素の追加と分割

要素を先頭に追加する。


$ cat list.hs 
#!/usr/bin/env runghc

arr = "zero" : ["one", "two", "Three"]
main = print( arr )
$ ./list.hs 
["zero","one","two","Three"]

リストを連結する。


Prelude> [1,2,3] ++ [4,5]
[1,2,3,4,5]

リストを分割する。


Prelude> splitAt 5 [1..10]
([1,2,3,4,5],[6,7,8,9,10])

条件に合う要素と合わない要素でリストを分割する。


Prelude> span (< 5) [1..10]
([1,2,3,4],[5,6,7,8,9,10])

条件に合わない要素と合う要素でリストを分割する。


Prelude> break (> 5) [1..10]
([1,2,3,4,5],[6,7,8,9,10])

その他リスト操作

リスト要素の和を計算する。


Prelude> sum [1,2,3,4,5]
15

リスト要素の積を計算する。


Prelude> product [1,2,3,4,5]
120

リスト要素に関数を適用する。


Prelude> map (*2) [1,2,3,4,5]
[2,4,6,8,10]

二つのリストから、要素のペアを作る。


Prelude> zip [1,2,3] [4,5,6,7]
[(1,4),(2,5),(3,6)]

リスト要素を展開してリストにする。


Prelude> concat [[1,2,3],[4,5,6]]
[1,2,3,4,5,6]

関連ページ