fugafuga.write

日々のログ

すごいH本 part4

引き続きすごいH本やっていく

レンジ

  • 数字
  • アルファベット

などを列挙できる要素をリストにする

*Main Lib> [1..20]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
*Main Lib> ['a'..'z']
"abcdefghijklmnopqrstuvwxyz"
*Main Lib> ['I'..'Q']
"IJKLMNOPQ"

ステップ付きレンジ

  • 最初の要素と次の要素をカンマで区切って上限を指定する
  • ただしステップサイズは1つしか指定できない
    • [1,2,4,7..20] とかは無理
-- 20までの偶数
*Main Lib> [2,4..20]
[2,4,6,8,10,12,14,16,18,20]

減少するレンジ

を書く場合は、ステップを指定する必要がある

*Main Lib> [20..1]
[]
*Main Lib> [20,19..1]
[20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]

ステップなしの場合、最初の要素が最後の要素より大きくなるまで要素を列挙しようとする。
そのため、空のリストが返る。

無限リスト

-- 1から先頭の10要素を取得
*Main Lib> take 10 [1..]
[1,2,3,4,5,6,7,8,9,10]

take による要素数の指定がないと

*Main Lib> [1..]                                                                                                                                                                         [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,6
5,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,...

こうなる

  • Haskell は遅延評価なので無限リストをすぐに評価しない

リスト生成に便利な関数

-- 指定した値を循環させたリストを作る
*Main Lib> take 10 (cycle [1,2,3])
[1,2,3,1,2,3,1,2,3,1]
-- 指定した値を繰り返す
*Main Lib> take 10 (repeat 2)
[2,2,2,2,2,2,2,2,2,2]
-- 単一の値からなるリストを作る
*Main Lib> replicate 3 5
[5,5,5]

今日はここまで。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

  • 作者: MiranLipovaca
  • 出版社/メーカー: オーム社
  • 発売日: 2017/07/14
  • メディア: Kindle版
  • 購入: 4人 クリック: 9回
  • この商品を含むブログを見る