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]