Life Goes On

まあまあだけど楽しんでる方です

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 の型付け

Haskell での限定継続の実装

Haskell での限定継続の実装は以下のようにいくつかありました。今回は 2 つ目の実装(継続モナドを拡張したもの)を簡略化して、利用しています。