b0721217.jpgホームマシンの反応なくなってたのでリブートしに会社にいってから会場へ。時間がないのでコンビニでパンとジュースを買って。時間ぎりぎり。

c15ab260.jpg

DSC06406

会場説明

DSC06403

  • WLANがつながらない人が10人以上いるっぽいが、設定が悪いです。1ヶ月おきに変更になる。
    • とおもったらモバイルルータかインターネット共有でチャンネルがぶつかっているっぽい。
  • 参加が今回初めての人もけっこういる。[挙手]

[2012-07-22 13:06]

3章 関数の構文 @mizu__tama

DSC06404

パターン

  • 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 = ではない。

ガード

  • ガードはパターンマッチと組み合わせられる。
  • ガードの場合はパターンとちがって評価されるの。
  • 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式

[2012-07-22 13:59]

[2012-07-22 14:05]

4章 Hello!再帰 / @ko1kun

DSC06407

  • 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]

演習問題

  • fizzBuzz: 3の倍数だったら"Fizz",5の倍数だったら"Buzz",両方だったら"FizzBuzz",それ意外はshowで。

DSC06408DSC06409DSC06410DSC06411DSC06412DSC06413

[2012-07-22 15:00]

第5章 高階関数 / @S1E11

DSC06421

:m Data.List
:t foldl'

DSC06422DSC06423

[2012-07-22 16:39]

LT: 文芸的プログラミング / @shokos

DSC06436

LT: idのナゾ constのヒミツ @kazu_yamamoto

DSC06439

[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]

そのほか

  • 次回は 8/19(日) らしい。
  • 田中(H)さんにサインしてもらった。

8c102d23.jpgDSC06405DSC06442