yashiganiの英傑になるまで死ねない日記

週末はマスターバイクでハイラルを走り回ります

すごいH本読書会に参加してきた

すごいH本の読書会を開催したので,発表してきました.
スライドはこちら.

参加者は初学者が多く,みんなでわいわい言いながら進めました.
最後に練習問題を用意していたんですが,思った以上に議論が白熱して,取り組んでいる最中にお開きになってしまったほどに議論が盛り上がったのは意外な結果でした.

以下盛り上がった話など

文じゃなくて式ってのはわかるけど,文と式の違いってなに?

if 式を説明しているときにあった質問.なんとなく理解しているつもりだったけど,「式は値を返す」くらいのことしか答えることができなかった.

Rangeの「..」って関数?

[1..10]のように「..」を使ってその範囲の値のリストを作ることができるけど,これって関数なの?なんの?という質問.調べてみると,syntax sugarだった.

[1..10] -- これは
enumFromTo 1 10 -- これのsyntax sugar

リスト内包表記の話

元々スライドにあった例が間違っていて,みんなであれやこれやと直しました.

[[x * 2 | x <- xs] | xs <- [[1,2,3], [4,5,6], [7,8,9]]]
-- [[2,4,6],[8,10,12],[14,16,18]]
の前のやつが並ぶリストになると考えたらわりとすんなり理解できる気がする.

ここに辿りつくまでに,

[x | xs <- [[1,2,3], [4,5,6], [7,8,9]], x <- xs]
-- [1,2,3,4,5,6,7,8,9]

ってやったらリストの中身がフラットになることを見つけました.ジェネレータは|のすぐ後にしか書けないと思ってたけど,そうじゃないのな.そういえば

[(x, y) | x <- [1..9], y <- [1..9]]

なんてこともできるしな.表現力高い.

練習問題

練習問題は車輪の再発明系とリストを作って必要なのだけとってくる系のを意識して見繕いました.けど,最終的に十分な時間がなくて自分のコードをちょっと紹介しただけでした.他の人がどういうコードを書いたのか気になっていたのに紹介してもらう時間がとれなかったのが残念です.次からは事前に問題を出しておいて,それぞれが発表できるといいなと思います.ちなみに問題3の元ネタはこれです.

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

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

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

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

追記

練習問題を解いて公開しました.
もっとおしゃれな解き方があったら教えてください!