2012年7月2日月曜日

core.logic

clojureのcontribをながめてるとcore.logicなるものが。

なにやらClojureで論理プログラミングをするためのものらしいのでいろいろと試してみた。

よく例に出るappendの例。


xとyが連結するリスト、zが連結後のリストです。
xが空ならyとzは同じ。
xの先頭とzの先頭が同じなら、xのテールとyを連結したzのテールになる。

普通の関数で書いたらこんな感じ?



しかし、普通の関数と違ってかなり高機能です。

実行してみます。


なんと、append一つ定義するだけで連結・差分・組み合わせの三つの使い方が出来るのです!

おー、論理プログラミングすげー

さらに、ClojureScript版も用意されています。

上記のappendのコードは動きますが、clojure.core.logicと比べると定義されている関数やマクロは少ないです。
バグってたりします。

数独も解いてみた。


数字の扱いが微妙なのでリストで数字を表してみました。

しかしこのコード、正しいパズルかどうかはテストしてくれますが、パズルを解決してくれません。

!=を使っているから・・・・?

まあ、まだまだ開発途中なので今後に期待です。