我正在尝试掌握 core.logic。
我可以在事实和规则中使用复杂的数据结构吗?
例如,我正在尝试这样做:
(pldb/db-rel test a)
(defn is-wibble? [a] (= true (:wibble a)))
(def facts
(pldb/db
[test {:name "x" :wibble true}]
[test {:name "y" :wibble false}]
[test {:name "z" :wibble true}]))
(defn -main [& args]
(doseq [x
(pldb/with-db facts
(run* [q]
(is-wibble? q)))]
(println x))))
但它抛出一个错误:
Caused by: java.lang.ClassCastException: java.base/java.lang.Boolean cannot be cast to clojure.lang.IFn
at clojure.core.logic.Substitutions.bind(logic.clj:425)
at polvo.core$_main$fn__377$fn__378$fn__379$_inc__380.invoke(core.clj:223)
其实在一线
(is-wibble? q)
尝试将规则创建为正常功能我错了吗?还是将复杂的数据转化为事实?