Как мне подключить clojure core.logic к базе данных?
Я наслаждался Clojure core.logic, но я столкнулся со стеной. Мне нужно иметь возможность использовать базу данных, SQL или нет, а не структуру данных в памяти. Оглядываясь вокруг, я вижу упоминание о to-stream
функция, но нет убедительных примеров ее использования.
У кого-нибудь есть хороший пример использования core.logic с базой данных?
1 ответ
Как уже предлагалось в комментариях, посмотрите на пример Datomic в репозитории core.logic. Основываясь на примере, вы можете написать что-то вроде этого:
(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
в a
,
Тогда вы можете представить, что пишете программу core.logic, например:
(run* [q]
(fresh [row]
(query some-db "... some query string ..." row)
(some-other-goal row q)))