2008/01/10
Pythonでモナド
Monads in Python (with nice syntax!):
デコレータとジェネレータを使ってる。 WiLiKi:Scheme:ExplicitMonadで考えたように、 動的型言語でモナドを書く場合の困難はreturnを多相にするところ (具体的にどのreturnを使えば良いかが、引数でなく呼び出し側が期待している 返り値の型に依存すること)だ。 このアイディアではモナドのreturnで例外を投げて、 デコレータ中で例外を捕捉してその時点でアクティブなモナドの unitメソッドを起動するというふうにしている。 実行時に有効なモナドをトラックするという原理はWiLiKi:Scheme:ExplicitMonadと同じだ。
しかしモナド演算に入る度にtryブロックを作って、returnの度に例外を 投げるんで性能は大丈夫なんだろうか。Pythonだと例外処理と捕捉は 軽いのかなあ。
Tags: Programming, Python, Scheme