我一直喜欢Clojure core.logic,但我遇到了一个困境。我需要让它使用数据库,可以是SQL或非SQL,而不是内存数据结构。当我四处寻找时,我看到提到了to-stream
函数,但没有实际的使用示例。
有人有使用core.logic和数据库的好例子吗?
我一直喜欢Clojure core.logic,但我遇到了一个困境。我需要让它使用数据库,可以是SQL或非SQL,而不是内存数据结构。当我四处寻找时,我看到提到了to-stream
函数,但没有实际的使用示例。
有人有使用core.logic和数据库的好例子吗?
正如评论中已经有人建议的那样,请查看core.logic repository中的Datomic示例。基于该示例,您可以想象编写类似以下内容的东西:
(defn query [db query-string out]
(fn [a]
(to-stream
(map (fn [result] (unify a out result))
(db-query db query-string)))))
a
(当然,您可以将其称为任何您喜欢的名称)。基本上,您需要在结果上进行映射,并将它们与a
中的out
统一。(run* [q]
(fresh [row]
(query some-db "... some query string ..." row)
(some-other-goal row q)))