This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2020-05-13
Channels
- # announcements (5)
- # babashka (35)
- # beginners (65)
- # braveandtrue (3)
- # calva (20)
- # cider (6)
- # clara (11)
- # cljs-dev (36)
- # cljsrn (64)
- # clojure (65)
- # clojure-europe (6)
- # clojure-germany (13)
- # clojure-italy (14)
- # clojure-nl (22)
- # clojure-spec (16)
- # clojure-sweden (6)
- # clojure-uk (81)
- # clojurescript (71)
- # conjure (120)
- # cursive (3)
- # datomic (10)
- # events (4)
- # figwheel (4)
- # figwheel-main (5)
- # fulcro (36)
- # ghostwheel (1)
- # graalvm (8)
- # helix (9)
- # jobs (4)
- # jobs-discuss (12)
- # kaocha (33)
- # leiningen (5)
- # luminus (1)
- # off-topic (24)
- # pathom (7)
- # rdf (4)
- # re-frame (3)
- # reagent (15)
- # reitit (11)
- # remote-jobs (1)
- # shadow-cljs (97)
- # slack-help (3)
- # spacemacs (23)
- # vim (15)
- # xtdb (35)
When using :exists
, adding a binding variable changes the behaviour of the rule, making it trigger more times. For example (only difference being ?i <-
in more
):
(cr/defrule more
[?p <- Player (= id ?id)]
[:exists [?i <- Item (= id ?id)]]
=>
(println "more" ?p))
(cr/defrule less
[?p <- Player (= id ?id)]
[:exists [Item (= id ?id)]]
=>
(println "less" ?p))
prints:
more #claraz.rules.Player{:id 2, :y 2}
more #claraz.rules.Player{:id 1, :y 1}
more #claraz.rules.Player{:id 2, :y 2}
more #claraz.rules.Player{:id 1, :y 1}
more #claraz.rules.Player{:id 1, :y 1}
less #claraz.rules.Player{:id 2, :y 2}
less #claraz.rules.Player{:id 1, :y 1}
I find that a bit unintuitive. Is it supposed to be this way?if you need to have an actual fact - and I suppose any fact will do for you - you should use an accumulator