Skip to content

Instantly share code, notes, and snippets.

@souenzzo
Last active November 20, 2018 20:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save souenzzo/e38e600d486532308084c2bba0a9b3e9 to your computer and use it in GitHub Desktop.
Save souenzzo/e38e600d486532308084c2bba0a9b3e9 to your computer and use it in GitHub Desktop.
Clara issue demo

Run with

clj -Sdeps '{:deps {clara-demo {:git/url "https://gist.github.com/souenzzo/e38e600d486532308084c2bba0a9b3e9" :sha "e08684d9b24e9ea91a9922b2f512bcf0a3eb7a7e"}}}' -m clara-demo

Will print:

[:rule1 :mk-session]
[:rule2 :fire-rules]
["rule1" :a]
["rule2" :a]
(ns clara-demo
(:require [clara.rules :refer :all]))
(def ^:dynamic *my-var* :empty)
(defn my-pred? [rule-id] (prn [rule-id *my-var*]) true)
(defrecord Fact [a])
(defrule rule1
[:test (my-pred? :rule1)]
[Fact (= a ?a)]
=>
(prn ["rule1" ?a]))
(defrule rule2
[Fact (= a ?a)]
[:test (my-pred? :rule2)]
=>
(prn ["rule2" ?a]))
(defn -main [& _]
(let [session (binding [*my-var* :mk-session] (mk-session 'clara-demo))
session (insert session (->Fact :a))]
(binding [*my-var* :fire-rules] (fire-rules session))))
{:paths ["."]
:deps {com.cerner/clara-rules {:mvn/version "0.19.0"}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment