# リスト

リストとは一様なデータ構造である。
つまり、同じ型の要素を複数個格納できる。

Main> let lostNumbers = [4,8,15,16,23,42]

Main> lostNumbers
[4,8,15,16,23,42]
リスト結合

Main> [1,2,3,4] ++ [9,10,11,12]
[1,2,3,4,9,10,11,12]
リスト結合(文字列)

Main> "hello" ++ " " ++ "world"
"hello world"

Main> ['w', 'o'] ++ ['o', 't']
"woot"
リスト結合の別解

Main> 'A':" SMALL CAT"
"A SMALL CAT"

Main> 5:[1,2,3,4,5]
[5,1,2,3,4,5]

1. の場合、1つだけ要素が入ったやつでもリストにしないといけない

Main> [1,2,3,4] ++ [5]
[1,2,3,4,5]
「リストと数値の結合」扱いされているので、無理。

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

:13:14:
No instance for (Num [a0])
arising from the literal `5'
Possible fix: add an instance declaration for (Num [a0])
In the second argument of `(++)', namely `5'
In the expression: [1, 2, 3, 4] ++ 5
In an equation for `it': it = [1, 2, 3, ....] ++ 5
n番目の要素を調べる

Main> "Steve Buscemi" !! 6
'B'

Main> [9.4,33.2,96.2,11.2,23.25] !! 1
33.2

Main> [9.4,33.2,96.2,11.2,23.25] !! 8

##### Exception: Prelude.(!!): index too large

リストの中にリストも入れられる
Main> let b = [[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]

Main> b
[[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]

Main> b ++ 1,1,1,1
[[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3],[1,1,1,1]]

Main> b ++ [1,1,1]

:20:7:
No instance for (Num [Integer])
arising from the literal `1'
Possible fix: add an instance declaration for (Num [Integer])
In the expression: 1
In the second argument of `(++)', namely `[1, 1, 1]'
In the expression: b ++ [1, 1, 1]

Main> [6,6,6]:b
[[6,6,6],[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]

Main> b !! 2
[1,2,2,3,4]
リスト比較

Main> [3,2,1] > [2,1,0]
True

Main> [3,2,1] > [2,10,100]
True

Main> [3,4,2] < [3,4,3]
True

Main> [3,4,2] > [2,4]
True

Main> [3,4,2] == [3,4,2]
True

5

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

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

リストの長さを調べる

Main> length [5,4,3,2,1]
5
リストが空かどうかを調べる

Main> null [1,2,3]
False

Main> null
True
リストを逆順にする

Main> reverse [5,4,3,2,1]
[1,2,3,4,5]

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

Main> take 1 [3,9,3]
[3]

Main> take 5 [1,2]
[1,2]

Main> take 0 [6,6,6]

Main> drop 3 [8,4,2,1,5,6]
[1,5,6]

Main> drop 0 [1,2,3,4]
[1,2,3,4]

Main> drop 100 [1,2,3,4]
[]
リストの最大値j

Main> maximum [1,9,2,3,4]
9
リストの最小値

Main> minimum [8,4,2,1,5,6]
1
リストの和を求める

Main> sum [5,2,1,6,3,2,7,5]
31
リストの積を求める

Main> product [6,2,1,2]
24

Main> product [1,2,3,4,5,7,6,0]
0

Main> 4 `elem` [3,4,5,6]
True

Main> 10 `elem` [3,4,5,6]
False