Как мне подключить 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)))
Другие вопросы по тегам