Вы можете исследовать сложные структуры данных в вашем db
, единственная недостающая часть здесь - это то, что в вашем предикате is-wibble?
вы получите логическую переменную вместо фактического, конкретного значения.
В core.logic есть цель pred
, которая будет project
lvar, чтобы вы могли проверить ее значение.Я переименовал цель, чтобы соответствовать типичным именам целей.pred
принимает lvar и некоторую функцию, которая получит значение lvar, и цель pred
успешна, если эта функция предиката возвращает истину-y.
(defn wibbleo [a] (pred a :wibble))
Или вы можете определить это так, используяисходный предикат:
(defn wibbleo [a] (pred a is-wibble?))
Обратите внимание, что вы также должны включить свой db-rel
в качестве цели (test q)
, тогда ваша программа должна работать:
(pldb/with-db facts
(run* [q]
(test q)
(wibbleo q)))
=> ({:name "x", :wibble true} {:name "z", :wibble true})