第2回 スタートHaskell2に参加してきました
最近趣味で触っていたHaskell、気になっていた勉強会についに今回はじめて参加することができました。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 13人 クリック: 490回
- この商品を含むブログ (28件) を見る
いわゆる「すごいH本」を教科書にしています。
今回は
- 第3章 関数の構文
- 第4章 Hello 再帰!
- 第5章 高階関数
をやりました。
第3章 関数の構文(@mizu__tamaさん)
- パターンマッチ
- ガード
- where
- let式
- case式
それぞれについては「すごいH本」を読めばわかることなので略します。(めんどい)
その他、以下の様な話題がありました。
上記にあげたものは全部case式の糖衣構文
whereとletの使いどころ
「let よりも whereを(できるだけ)使え.caseは使うな」.なるほど #start_haskell
— nishioさん (@nishio_dens) 7月 22, 2012
where vs let に関しては、これを参考にして下さい。 is.gd/x6oniR #start_haskell
— 山本和彦さん (@kazu_yamamoto) 7月 22, 2012
letとlet inの違い
「すごいH本」の第3章の中では、
4 * (let a = 9 in a + 1) + 2
のように基本的にはletはinセットで使用しているのですが、リスト内包表記とあわせて使用する場合は
calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2]
のようにin句がない。
また、ghcで
let hoge = 100
のように書くと、以降ghci中でhogeを使用することができるようになります。
これについては@kazu_yamamotoさんが解説してくれていました。モナドがどうとか言っていた気がするのですが、きちんと理解はできなかったので既に脳内から雲散霧消してしまいました。
- リスト内包表記では、リスト内包という表記の中で宣言するとスコープがその部分のみなのでwhereのようにリスト内包内部でのみ使用可能な変数みたいにして使える
- ghc中でletを宣言すると、ghc全体のスコープに対して置かれるのでどこでも使えるようになる。(グローバル的な?)
というのが私の現時点での理解です。
第4章 Hello 再帰!(@ko1kunさん)
いろんな本からの参照があったのが印象的でした。(読んでみたい、と思った本もちらほら。)
内容としては再帰を使った初歩的な関数を書いてみよう、というものでした。このへんはプログラミングHaskellでもやっていたので大丈夫かな。
途中フィボナッチ関数の計算速度に関する話題がいろいろと出てきたのですが、Haskellとは関係のない、アルゴリズムの話だったように思います。
普通の速度のフィボナッチ数列: is.gd/f98mUf #start_haskell
— 山本和彦さん (@kazu_yamamoto) 7月 22, 2012
素朴な fib が何故効率が悪いかの図: is.gd/ZiXFu7 #start_haskell
— 山本和彦さん (@kazu_yamamoto) 7月 22, 2012
第5章 高階関数(@S1E11さん)
今日のヤマだったと思います。
- カリー化
- map, filter
- ラムダ式
- foldl, foldr
- $を使った関数適用
- 関数合成
foldl, foldrと無限リストが絡むあたりが難しく、つまりました。これは次回までに自分で悩んでおきたいところですね。
foldl, foldl', foldrの使い分け
foldlとfoldrの選択:二項演算が対象律を満たさないとき→選択子がそもそもない、満たすとき→二項演算の左辺引数に対するコストが大きい or 無限リストを扱いたい→foldr、二項演算が引数に対して正格 -> foldl' それ以外→foldl #start_haskell
— Hideyuki Tanakaさん (@tanakh) 7月 22, 2012
関数合成をする際の.(ドット)、$について
関数合成は一番右だけ $ にして、残りは .にすれば大体うまくいく。#start_haskell
— Connieさん (@Slash_01) 7月 22, 2012
その他にもTLでは正格とか末尾再帰の話題がありましたが、かなりわかっていないので今は見なかったことにしておきましょう。
LT | 文芸的プログラミング(@shokosさん)
hsファイルはコードが基本で、コメント部分は--や{- -}で指定するのですが、それが逆になり、基本がコメントで、コードについては明示的に指定するlhsについてのお話。
Birdモード, LaTeXモードの2つがあるようです。
参考: Executing Haskell program
文芸的プログラミング (ASCII SOFTWARE SCIENCE Programming Paradigm)
- 作者: ドナルド・E.クヌース,Donald E. Knuth,有沢誠
- 出版社/メーカー: ASCII
- 発売日: 1994/03
- メディア: 単行本
- 購入: 1人 クリック: 31回
- この商品を含むブログ (23件) を見る
LT | idのナゾ、constのヒミツ(@kazu_yamamotoさん)
haskellのid, constはどこで使うの?という話題がいつの間にかSKIコンビネータとかどんどんdeepな話に・・・
コンビネータについてやけに興奮した調子で話す@kazu_yamamotoさんが面白かったです。
数学パズル ものまね鳥をまねる POD版 ―愉快なパズルと結合子論理の夢の鳥物語
- 作者: レイモンドスマリヤン,阿部剛久,黒沢俊雄,福島修身,山口裕
- 出版社/メーカー: 森北出版
- 発売日: 2010/04/05
- メディア: 単行本
- 購入: 2人 クリック: 23回
- この商品を含むブログ (1件) を見る
感想
100人超で5時間超え、という規模の勉強会は初めてでしたが、発表だけでなくTwitterでのやりとりも楽しく、集中力を途切れさせずに最後まで楽しく参加できました。
発表者のみなさま、主催者、運営者のみなさま、お疲れ様でした。次回もぜひ参加したいと思います。