昨日こんなものがTLに流れてきた Clojureでモナド内包表記とStateモナド - http://basking-cat.blogspot.jp/2012/10/clojurestate.html なかなかおもしろいのでCLでも実装。 コアの部分はこれだけ。あとは型クラスよろしくモナドごとにメソッドを定義していく。 使い方はこんな感じ (perform ((a (list 1)) (b (list 2 3)) (c (list 3 4 5))) (+ a b c)) ; => (6 7 8 7 8 9) すばらしい。また別の例 (defun double-list (x) (list x x)) (perform ((a '(1 2 3)) (b (double-list a)) (c (double-list b))) c) ; => (1 1 1 1 2 2 2 2 3 3 3