我一直在享受 Clojure core.logic,但我碰壁了。我需要能够让它使用数据库,无论是否 SQL,而不是内存数据结构。当我环顾四周时,我看到提到了一个to-stream
函数,但没有使用它的可靠示例。
有没有人有一个将 core.logic 与数据库一起使用的好例子?
我一直在享受 Clojure core.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)))