函数プログラミングの集い に行ってきたのでメモ。
仕事で F# を使った bleis さん。
- F# には独自のライブラリがあるので、.NET Framework 2.0 縛りでも楽にプログラミング出来る。
- 事例1: 手作業を自動化する Web アプリ。一ヶ月 PM + PG1 + 自分
- 「実践 F#」を教科書にして、「自分でループを書かない」「リストの後ろに追加しない」「null と None は違う」と鍛えた
- 事例2: 社内結合ツール
- 事例3: プロキシサーバー Azure
- 8000 行だった物が 1600 行に減った
コードの行数がこんなに減ったというのはすごい。。。
関数型言語偏歴を語る kskmc さん。
巨大なログを Functional Reactive Programming で処理する mkotha さん
Euphoria という FRP ライブラリの紹介同時刻に複数のイベントが発生しても一度しか処理しなくて良いように工夫。質問者にチップ設計をやってる人が何人かいたのが面白かった。やっぱりハードの人も興味あるのか。
部分継続の dico_leque さん
call/cc だと残りの処理全体をとり出すので
- 戻り値が無い (exit 0) で終了してしまうため
- 組み合わせられない
と言うことで、残り全部じゃなくて部分を取り出すと便利 -> 部分継続でモナドを実装(実はよく分からなかった)。
SML# を改造する mzp さん
世の中には二種類のエディタが存在する。それは Emacs と Eclipse 。。。
Emacs で型情報を表示するためにコンパイル時の型アノテーションを抜き出す話。SML# はソースが短く (150,000 行) 改造しやすい。数多くの魔改造が存在する。
テストにおける静的片付け関数型 kyon_mm さん
- お勧め: 「要求を使用化する技術表現する技術」 by 清水吉雄
- お勧め: 「実践アジャイルテスト」
- 動的テスト: 自動テスト
- 静的テスト: コードレビュー
- きょん: だれが行なっても一意に定まる
- 手段による分類
- unit 依存全くなし
- component 依存あり
- integratio DB 使う
- system capture replay など
- 目的による分類(あまり聞いてなかった。。。)
イベント・ドリブンプログラムの関数的書き方 osiire さん
- 状態を減らそう
- グラフ表示 UI 問題
- 重ね書きモード On/Off がある。
- グラフの種類 {棒グラフ, 線グラフ, 散布図} 重ね書きモード On だと重複。Off だと排他的に表示する。
- 最初の実装。重ね書きモード、各モード状態を Boolean で管理: if 文の連続でややこしい。
- 改良版: 代数型データ構造を使うとスッキリ!
- 意味イベントを構築しよう
- データをポーリングする
- ボタンを押すとデータを取ってくる
- イベントを組み合わせて意味イベントを作り出す。
- イベントコンビネーター
特にこの osiire さんの発表はネタの選び方、話の進め方とも最高に素晴らしかった。最初のテーマ「状態を減らそう」では、単に Boolean では無く代数データ構造を使うことで制約を上手く表現出来る例が挙げられた。(あとで思ったんだけど、グラフの種類を種類のリストでは無く、種類のセットにすると制約を完全に型だけで表現出来るのでもっと良かったのでは無いかな?。)後のテーマ「意味イベントを構築しよう」では、イベントを組み合わせて新しいイベントを作る事によりプログラムがすっきりする話だった。特に、これは FRP と書くと難しそうに見えるけど、「イベント合成」と書くと普通に見える所もすごいと思った。
飲み会は池袋アカデミーホールにて。pokarim さんが関連モデルについて熱く語っておられた。