aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clojure/contrib/datalog/literals.clj17
-rw-r--r--src/clojure/contrib/datalog/seminaive.clj9
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