OCamlMeeting in Nagoya にいってきた
F# の流儀
- (|>) is an important operator in the F# 'culture'.
- インラインなところがおもしろいらしい
資料
OCaml 3.12 における第一級モジュールと合成可能なシグネチャについて
第一級モジュール
- module type ?
- 理論的には新しくない(10年前)
- 使うとこ
- 実行時に実装を選ぶ
- 型安全なプラグイン
- クラスの動的生成・継承
- 型の実行時表現とGADTs
- 型の等式を表現できる
- 制限
- ファンクタの中では第一級モジュールを開くことはできない
- 型とpack・unpack を全て書かなければならない
合成可能なシグネチャ
- シグネチャをモジュールに変換する
- モジュールのシグネチャを取得する
- シグネチャの破壊的代入でいろいろできる
- 制限
- 代入をかけられるのは一番上のレベルの型とモジュールのみ
- パス(定義済みのもの)しか代入できない
- 型パラメータの数・順序は変えられない
- 削除によって,構文的にスコープが有効でないシグネチャにできる
まとめ
Golf しかやったことのない人にはレベルが高過ぎでしたけど,
概念としてはちょっとわかった気がした〜.
なんかおもろいような気がするんだけど自分の勉強不足ですね.
この辺いろいろ他でも使える概念なんかなー.
デザインレシピ,モジュール,抽象データ型
- 標準的なアプローチ |> SICP
- Matthias Felleisen "From POPL to the classroom and back." - Principles of Programming Languages, Portland, Oregon(2002).
- How to Design Programs - M. Felleisen.
- プログラミングをするときには,そもそも何を考えなくてはならないか
- そもそも,普通の人はどうやって書いているのか
- 今日習った for 文をとりあえず書く
- デザインレシピ - 宣言的プログラミング?
- プログラミングを書くのは最後から二番目だ
- テスト(入出力関係)を先に書く
- ライブコーディング(ins_sort)
(* 目的:リストを受け取ったら,それを昇順に並べて返す *) (*2 - 目的を書く *) (* ins_sort : 'a list -> 'a list *) (*3 - 型を書こう.型推論は意図とは違っているかもしれない *) <del>let ins_sort (*1 - 名前を決める *)</del> <del>let ins_sort lst = [] (*4 - ヘッダ(シグネチャを書く)*)</del> <del>(* ins_sort [] = [] ins_sort [2; 1] = [1; 2] ins_sort [3; 6; 2; 1; 5] = [1; 2; 3; 5; 6] *) (*5 例を書く - テストを書く*)</del> (* テスト *) let test1 = ins_sort [] = [] let test2 = ins_sort [2; 1] = [1; 2] let test3 = ins_sort [3; 6; 2; 1; 5] = [1; 2; 3; 5; 6] (*6 テストに変換する - assert を入れる*) let ins_sort lst = match lst with [] -> [] | first :: rest -> [] (*6 テンプレートを書く*) insert (ins_sort rest) first (*7 目的からそのように書く - サブ問題に落とす*) let insert lst elm = []
- 本当のモジュール化は型を隠蔽する
- インターフェイスはデザインレシピの目的に相当
Spot Your White Caml
- Typical Day 1: Welcome!
- 酒とかただで呑ませてくれたり
- 素晴らしい - ぼくもそう思いました(過去形)
- Typical Day 2: Real Job Starts
- 量がハンパねぇ
- Typical Day 100 - 試用期間終了
- Improve Your Learning Curve
- Read .mli First - コードを読むスピードが速くなる
- Read interfaces (=.mli) first
- Skip implementation (=.ml)
- Write Good .mli
- Let TYPES tell details of functions
- ocamlc -i gives a good start point
- Do NOT Ask Silly Questions
- Then Ask WHY, which the Code does NOT tell
- コードを読むテクニック
- Syntax Hilighting
- Manual Search
- grep
- Otags - http://askra.de/otags/
- Manual Search is pain but also Educational
- Use the Compiler Directed Tools.
- ocamlspot
: - やはりコンパイラか - ocamlspot.el for Emacs
- You need the Patch
- Patched compiler may be Buggy
- Same story begins.
資料
Lightening Sessions
Golf
- Golf 用モジュールの解説
- map l f にしてあるのは,括弧がケズれるから
- pid が得られると,4桁の値が欲しいときとかに使える
Golf コンテスト結果発表と表彰
- なんかすごいということはわかります
- golf すげー.1 byte の差が怖いです