diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/clojure/contrib/datalog/literals.clj | 17 | ||||
-rw-r--r-- | src/clojure/contrib/datalog/seminaive.clj | 9 |
2 files changed, 16 insertions, 10 deletions
diff --git a/src/clojure/contrib/datalog/literals.clj b/src/clojure/contrib/datalog/literals.clj index 0da3f2bc..12605160 100644 --- a/src/clojure/contrib/datalog/literals.clj +++ b/src/clojure/contrib/datalog/literals.clj @@ -315,15 +315,14 @@ "Given a literal l, return a negated version" [l] (assert (-> l :literal-type (= ::literal))) - (conj l :literal-type ::negated)) - -;(defn delta-literal -; "Given a literal l, return a delta version" -; [l] -; (let [pred (:predicate l)] -; (if (vector? pred) -; (assoc l :predicate ( - + (assoc l :literal-type ::negated)) + +(defn delta-literal + "Given a literal l, return a delta version" + [l] + (let [pred* (:predicate l) + pred (if (map? pred*) pred* {:pred pred*})] + (assoc l :predicate (assoc pred :delta true)))) ;;; Database operations diff --git a/src/clojure/contrib/datalog/seminaive.clj b/src/clojure/contrib/datalog/seminaive.clj index 3b23d7d4..b013996d 100644 --- a/src/clojure/contrib/datalog/seminaive.clj +++ b/src/clojure/contrib/datalog/seminaive.clj @@ -50,7 +50,7 @@ results []] (if (nil? lit) results - (let [new-results (if (i-preds lit) + (let [new-results (if (-> lit literal-predicate i-preds) (conj results (build-body left lit right)) results)] (recur (first right) @@ -69,5 +69,12 @@ (mapcat #(compute-delta-rules* % i-preds) rs)) +(comment + (compute-delta-rules* (<- (:anc :x ?x :y ?y) (:anc :x ?x :y ?z) (:anc :x ?z :y ?y)) #{:anc}) + + (use 'clojure.contrib.stacktrace) (e) + (use :reload 'clojure.contrib.datalog.literals 'clojure.contrib.datalog.seminaive) +) + ;; End of file |