Haskellと確率と限定継続
会社の勉強会で、Haskell による確率プログラミングについて話しました。
元ネタは Oleg さんの論文(Probabilistic Programming)です。OCaml で書かれていたプログラムを Haskell に翻訳しながら解説しました。
もともとの論文の主張は、木探索として定義したモデルを継続渡し方式(Continuation-Passing Style / CPS)にすることで効率化できる、さらに限定継続を利用することで、継続を意識せず直接方式(Direct Style)で書けるようになるというものでした。
木探索から CPS にすることで効率化という流れは Haskell でも同じなのですが、限定継続を利用しても直接方式では書けないため、あまり嬉しくありません。でも Haskell には do 記法があるので、モナドとして定義すれば擬似的に直接方式で書けてハッピーというのが、今回の発表の主旨です。
なにぶん継続初心者が書いていますので、誤りなどあれば指摘いただけると助かります。
ソースコード
ソースコードは github に上げました。まだ使い方がよく分かっていません。
GitHub - rst76/probability: Probability Programming in Haskell
限定継続について
限定継続を学ぶにあたっては、以下の資料がとても分かりやすく参考になりました。また私の発表資料中で、面識もない浅井先生のお名前を勝手に拝借しています。すみません。
継続を使った Printf の型付け