タグ

ブックマーク / basking-cat.blogspot.com (2)

  • Clojureでモナド内包表記とStateモナド

    cljsbuildのcrossoversという機能を知らない所為で今まで無駄に苦労してきましたが、これでマクロが使えないという制約から解き放たれました。 万歳!cljsbuild! マクロが使えるようになってまず一番最初にやることは何か? もちろん、モナド内包表記の実現ですね! HaskellのdoよりはScalaのforの方が慣れているのでこちらを採用しました。 動的型付けの言語でのモナドの実現はいくつか見てきましたが、明示的にコンテキストを指定するタイプはあまり好かないので、ClojureらしくProtocolで表現することにしました。 Monadic Protocol 通常モナドはunitとbindが実装され、モナド則 bind f (unit x) == f x bind unit m == m あともう一個なんかあった気がする を満たしますが、動的型付けの言語でunitを実現する

  • Clojureで三目並べ

    Lisp Advent Calendar 2012 6日目の記事です。 三目並べ ここでは三目並べソルバについて書きます。 tic tac toe 三目並べ、すなわち◯×ゲームです。 小学生の頃とかやってました。 このゲームは両者が最善を尽せば必ず引分けになるゲームで、その最善手もわかりやすいので他人とやってもだいたいドローになります。 この三目並べで盤面から次の手を返すプログラムを、ClojureとClojureScriptの両方で動くように作成します。 core.logic 今回は論理プログラミングでこのパズルを解きます。 最初にnamespaceですが、ClojureとClojureScriptの両方で動かす為に、多少の黒魔術があります。 ;*CLJSBUILD-REMOVE*;はcljsbuildがビルド時に削除してくれるコメントです。 core.logicがclj版とcljs版で

  • 1