Haskell入門(リスト内包表記)

レンジ

Prelude> [1..10]
[1,2,3,4,5,6,7,8,9,10]
Prelude> [1,3..10]
[1,3,5,7,9]
Prelude> [4,10..100]
[4,10,16,22,28,34,40,46,52,58,64,70,76,82,88,94,100]
Prelude> [10,9..1]
[10,9,8,7,6,5,4,3,2,1]

3の倍数の最初の10個
Prelude> [3,6..3*10]
[3,6,9,12,15,18,21,24,27,30]
別の方法として、無限に続く3の倍数のリストの最初の10個を取り出す方法もある。
Prelude> take 10 [3,6..]
[3,6,9,12,15,18,21,24,27,30]

cycle:リストの繰り返し
repeat:1つの要素の繰り返し
replicate:1つの要素の複製

Prelude> take 10 (cycle [1, 2, 3])
[1,2,3,1,2,3,1,2,3,1]
Prelude> take 10 (repeat 1)
[1,1,1,1,1,1,1,1,1,1]
Prelude> replicate 3 2
[2,2,2]

リスト内包表記

1から10の平方数のリスト
Prelude> [x * x | x <- [1..10]]
[1,4,9,16,25,36,49,64,81,100]

1から100の平方数のうち、1000より小さい数のリスト
Prelude> [x * x | x <- [1..100], x * x < 1000]
[1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961]

Prelude> let collatz xs = [if (odd x) then (x * 3 + 1) else (div x 2) | x <- xs]
Prelude> collatz [1..20]
[4,1,10,2,16,3,22,4,28,5,34,6,40,7,46,8,52,9,58,10]

複数のリストの要素のすべての組み合わせからリストを作成する
Prelude> [a * b | a <- [2, 3, 5], b <- [2, 3, 5]]
[4,6,10,6,9,15,10,15,25]