2017-08-24(木) Haskellの学習 #1
Haskellの勉強。サクサク進めよう!
とりあえず、1周目はサンプルコードの写経だけでOK。
教科書
「すごいHaskellたのしく学ぼう!」
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (73件) を見る
1.4 レンジでチン!
(p.13)
レンジは列挙できる要素の組み合わせでリストを作るのに使われます。
調子にのって[1..1000000]をやったら、表示完了までえらい時間がかかったw
レンジにはステップを指定することもできます。
最初の要素と2つ目の要素をカンマで区切って、上限を指定する
ghci> ['a'..'z'] "abcdefghijklmnopqrstuvwxyz" ghci> ['a','c'..'z'] "acegikmoqsuwy" ghci> ['b','d'..'z'] "bdfhjlnprtvxz"
take 24 [13,26..]
take 10 (cycle [1,2,3])
take 10 (repeat 5)
replicate 3 10
[0.1, 0.3 .. 1]
1.5 リスト内包表記
(p.15)
リスト内包表記はリストのフィルタリング、変換、組み合わせを行う方法です。
これは数学における集合の内包的記法の概念に近いものです。
http://www.geocities.jp/k27c8_math/math/set_theory/another_how_to_expression_set.htm
-
条件を書いて集合を表現する記法を内包的記法と言います。
{ x | xは自然数の偶数 かつ x ≦ 1000 }
-
全ての元を表して集合を表現する記法は外延的記法と呼ばれます。
{ 1, 2, 3 }
「<-」という演算子?は「ジェネレータ」というらしい???
Haskellチートシート(翻訳) - Qiita - リスト内包表記
リスト内包表記は4つのタイプの要素から成ります。ジェネレータとガードとローカル束縛とターゲットです。
squares = [x * x | x <- [1..]]
x <- [1..]は全てのIntegerの値のリストを生成し、xに一つ一つ入れます。
List comprehension - HaskellWiki
[toUpper c | c <- s]
the generator c <- s feeds each character of s in turn to the left-hand expression toUpper c, building a new list.
内包表記
構文 [ 式 | 限定子1, ..., 限定子n ]
ここで,限定子には次の 3 つがあります。
- ジェネレータ: パターン <- 式 と書く。x <- [1, 2] など。
- ガード: 条件式を書く。odd x など。
- 局所宣言: let で始まる宣言を書く。let y = 4 など。
(14:50)ネットサーフィンのついでに寄り道
↓Yahoo!のトップニュースから。
↓リンク記事
(少子化、晩婚化が進んでいるけど、大変なんだなーと思った。)
(15:20)はてなブックマークトップから。
なんかこれを貼れと言われた気がした→ Jigsaw - Sky High - (Original Promo Video) https://youtu.be/sPXNffnAdp0 ←でも、この曲、女に振られた男の心情なんよね。
(16:10)白のバックダンサーがキレッキレ!www
チューチュートレインの原型って、コレじゃなかろーかw
(てか、この帽子のデザイン、サンバの衣装とか?www)
コメント見ると、ビヨンセよりもこっちのほうがいいんじゃないか?ともw
(16:30)Haskellに戻ろう。。。
(17:30)夕食を済ませて、作業に復帰。
x <- [1..10] 「xに束縛している」「取り出した値をxが受け取る」
(p.16)
述語=条件のこと。内包表記の最後にカンマで区切って書く。
フィルター=述語(条件)を使って、要素を間引くこと。
リスト内包表記は、入れ子にできる。
[ [x | x <- xs, even x ] | xs <- xxs]
1.6 タプル
(p.18)
サンプルコードをコピペして、GHCiでガンガン実行!
とりあえず、文法の意味だけは理解できた。
覚えるには至っていないけど、時間短縮のため、1周目はコード写経だけで行こう!
(22:00)第1章、読了。
お疲れさん>自分!!!