私はClojurecore.logicを楽しんでいますが、壁にぶつかりました。メモリ内のデータ構造ではなく、SQLであるかどうかに関係なく、データベースを使用できるようにする必要があります。周りを見回すと、to-stream
関数についての言及がありますが、その使用法の確かな例はありません。
データベースでcore.logicを使用する良い例はありますか?
私はClojurecore.logicを楽しんでいますが、壁にぶつかりました。メモリ内のデータ構造ではなく、SQLであるかどうかに関係なく、データベースを使用できるようにする必要があります。周りを見回すと、to-stream
関数についての言及がありますが、その使用法の確かな例はありません。
データベースでcore.logicを使用する良い例はありますか?
誰かがコメントで既に示唆しているように、core.logic リポジトリの Datomic の例を見てください。そこの例に基づいて、次のようなものを書くことを想像できます。
(defn query [db query-string out]
(fn [a]
(to-stream
(map (fn [result] (unify a out result))
(db-query db query-string)))))
すべての core.logic ゴールは、置換マップを取るクロージャーを返すだけa
です (もちろん、好きなように呼び出すことができます)。out
基本的に、結果をマッピングしてin で統合する必要がありますa
。
次に、次のような core.logic プログラムを作成することを想像できます。
(run* [q]
(fresh [row]
(query some-db "... some query string ..." row)
(some-other-goal row q)))