Fork me on GitHub
#clara
<
2017-04-12
>
souenzzo22:04:26

Hi. How to make an "or" in "match" part of rule. Example:

;; There is 2 types: groups and items
;; Example:
;; :group [1 false 2]
;; :group [1 false 3]
;; :item [2 true]
;; :item [3 false]
;; :group [4 true 5]
;; :item [5 false]
;; Group '1' contains items '2' and '3'
;; Group '4' contains item '5'
;; My `select` query shoud find [[4][1]]
;; because they are groups and they are selected
;; or contains a selected item
(defrule selected-groups
         ;; Or this
         [:group [[id selected _]] (= ?id group) (= selected true)]

         ;; Or this
         [:group [[id _ item-id]] (= ?id id) (= item-id ?item-id)]
         [:item [[item-id selected]] (= ?item-id item-id) (= selected true)]
         =>
         (insert! ^{:type :select} [?id]))
(sorry for big example) (yes, I know how to do it with 2 rules.) (I dont care with duplicate entries)