ホームマシンの反応なくなってたのでリブートしに会社にいってから会場へ。時間がないのでコンビニでパンとジュースを買って。時間ぎりぎり。
会場説明
- WLANがつながらない人が10人以上いるっぽいが、設定が悪いです。1ヶ月おきに変更になる。
- とおもったらモバイルルータかインターネット共有でチャンネルがぶつかっているっぽい。
- 参加が今回初めての人もけっこういる。[挙手]
[2012-07-22 13:06]
3章 関数の構文 @mizu__tama
パターン
- https://speakerdeck.com/u/mizu__tama/p/di-2hui-sutatohaskell2-3-guan-shu-falsegou-wen
- twitterを始めたときにTLがたまたまHaskellでうまっていて流行っていると勘違いした!
- 訂正: 「TLがHaskellで埋まったのはTwitter始めたときでなく今年のHaskell Day の日ですね :)」
- パターンマッチでマッチしないと実行時例外
- {-# OPTIONS -Wall -Werror #-}: Werrorをつけると警告がエラーになってコンパイルが失敗する。Wallはつけるのがいいけど、Werrorはお好みで。
- リスト内包表記でパターンマッチに失敗したら、その要素は無視される。
- リストのパターンマッチでは xs++xy はつかえない。どこからどこまでかわからないから、ではなくて、単なる関数であってパターンじゃないから使えない。
- 捨てるパターンには"_"だけではなくて"_hoge"でもいい。_ではじまっていれば使っていない変数であっても警告が出ない。
- all@(x:xs) ASパターンをつかうと all = (x:xs) になる。
x=4 SayMe x = ... と書いても SayMe 4 = ではない。
- (パターンマッチで条件分岐だけじゃなくて、where/letとかの変数束縛もパターンマッチっていうんか)
ガード
- ガードはパターンマッチと組み合わせられる。
- ガードの場合はパターンとちがって評価されるの。
- otherwiseは変数でTrueと定義されていて、otherwiseが評価されてTrueになってガードが成立する、というしかけ。
where節
- where節で定義した変数はひとつのパターン内でのみ有効なのでNot in scopeとエラーになる。
- 共通部分式の削除はやってくれないかもしれない。デフォルトでは有効らしい。くわしくはコンパイラの吐いたコードみろよ。
- ローカル関数は型宣言を書かないのが普通。トップレベルの関数でも型推論がうまくいっちゃうなら型宣言を書かなくてもいいかもしれない。
- where節でも型宣言を書ける
where 必要ならここに型宣言 bmi =
let式
- ローカルスコープに関数を作るときにつかえる。内包表記とかで、どちら側でも。
- GHCiで let の in がない構文がある。
- リスト内包表記の中でだけinがでてこないletがある。
- とりあえずinのないletは式を列挙するようなところで使えると覚えておけばいよいが、初心者は使わなくてok。
- whereの方が宣言的に書けるのでHaskeller好みだが、letでしか書けないところもある。
緊急連絡: WLANの調子が悪いのは無線でインターネット共有になってて電波が干渉してない?
case式
- なるべく使わないようにする。
- ifもcaseへの糖衣構文。Haskellは結局caseしかない。
- http://www.haskell.org/haskellwiki/Declaration_vs._expression_style
[2012-07-22 13:59]
[2012-07-22 14:05]
4章 Hello!再帰 / @ko1kun
- http://www.groovyist.jp/20120722Chap4.pdf
- 関数はshowクラスのインスタンスではないので表示できない。エディタでみるしかない。
- fibの素朴な実装ではfib 30でも劇遅。
- (まだならってないことは使っちゃだめ)
- zipつかったやつが超速。
- 引数で前の計算結果をひっぱってくれば早くなるはず。
- memoizeはされるかどうかわからない。Haskellの欠点?
- Intだとケタ溢れの恐れがあるけど。
- fibの素朴な実装ではスタックオーバーフローしそうにおもえるが、遅延評価とjumpのおかげでそうはならない???
- !!::Int->なんだけど、それはそういう実装なだけ。(たぶんデカいと実用的じゃないからか?????)
- hoge'とかの関数をファイルにするとき: Haskellではファイルはモジュールなので逆に関数名をつけない!
- Haskellではtab文字は8このスペースとしてあつかわれることになっている。tab文字はつかわないようにしよう。
- 普通の速度のフィボナッチ数列: https://gist.github.com/3158648
- 素朴な fib が何故効率が悪いかの図: http://www.sampou.org/cgi-bin/haskell.cgi?Memoise
[2012-07-22 14:52]
休憩
[2012-07-22 15:30]
第5章 高階関数 / @S1E11
- https://docs.google.com/presentation/d/12u5aRkuFKzIQR_HCjvCPuNn-UHDPNCEGiOyVOrRw7Ho/edit?pli=1#slide=id.p
- 高階関数は関数を返す関数とか関数を引数にとる関数とか
- max::Ord a=>a->(a->a)
- (\x y -> ...) は (\ x y -> ...) と書いてもok (空白あり)
- つかいわけの基本: list -> list なら foldr(たたみこんでないけど!)、list -> int なら foldl' がいい。foldlはつかわない。
:m Data.List :t foldl'
- ($ 3) の例は、こんな使いかたはしないよ。
- 外側の括弧からはずして$にかえてゆく。一番右の$意外の$を.に置き換える。
[2012-07-22 16:39]
演習問題
- http://wiki.haskell.jp/Workshop/StartHaskell/LYHGG/exercise/3
- http://wiki.haskell.jp/Workshop/StartHaskell/LYHGG/exercise/4
- http://wiki.haskell.jp/Workshop/StartHaskell/LYHGG/exercise/5
[2012-07-22 17:42]
LT: 文芸的プログラミング / @shokos
- - http://www.slideshare.net/ShokoSasaki/ss-13718537
- https://github.com/shokos/Haskell_test_tut
- 転職中...
- みんなプログラムを書くのは好きだけどドキュメントを書くのはあんまり...
- 拡張子は .lhs
- vimmer..
- コード部分は先頭が > か \begin{code}..\end{code}か。
- この形式でドキュメントを書いてもだいじょうぶか? Excelしか許さない環境もあるよってことで。
LT: idのナゾ constのヒミツ @kazu_yamamoto
[2012-07-22 17:50]
- - http://mew.org/~kazu/material/2012-id-const.pdf
- id
- 関数合成の畳み込みの初期値として
- Boolをそのまま返す述語として
- const
- 引数を無視する関数として: ignore = const (return ())。これは ignore _ = return ()といっしょ。
myif True = const myif _ = const id
- id,constはSKIコンビネータからきているらしい。
- Yコンビネータを知ってるひとはけっこう会場にいるっぽい。
- SKIコンビネータはlambdaと双子の兄弟みたいなもの
- 無名関数で再帰
[2012-07-22 18:04]