10

私はClojurecore.logicを楽しんでいますが、壁にぶつかりました。メモリ内のデータ構造ではなく、SQLであるかどうかに関係なく、データベースを使用できるようにする必要があります。周りを見回すと、to-stream関数についての言及がありますが、その使用法の確かな例はありません。

データベースでcore.logicを使用する良い例はありますか?

4

1 に答える 1

7

誰かがコメントで既に示唆しているように、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)))
于 2013-01-26T01:15:12.277 に答える