Another "old skool" way of doing it using predicate constraints is...

(clear)
(deftemplate item (slot name))
(deftemplate bag-of-items (multislot item-names))

(defrule fire-for-all-members-in-bag
  ; If you have a bag of item names ...
  (bag-of-items (item-names $?item-names))
  ; and there is an item whose name is member of this bag ...
  ?item <-(item (name ?name&:(member$ ?name $?item-names)))
 =>
  ; ...then do something interesting
  (printout t ?name " is in the bag!" crlf))

;; Program
(reset)
(assert (item (name A)))
(assert (item (name B)))
(assert (item (name C)))
(assert (bag-of-items (item-names A B C)))
(run)

*Jason C. Morris*
President, Principal Consultant
Morris Technical Solutions LLC
President, Rules Fest Association
Chairman, IntelliFest 2013: International Conference on Reasoning
Technologies
--------------------------------------------
phone: +01.517.376.8314
skype: jcmorris-mts
email: consult...@morris-technical-solutions.com
mybio: http://www.linkedin.com/in/jcmorris



www.intellifest.org
Invent * Innovate * Implement at IntelliFest!


On Fri, Jul 26, 2013 at 4:55 PM, Aurelien Mazurie <ajmazu...@oenone.net>wrote:

> Dear Jess users,
> I am wondering how to write a rule that would dynamically match multiple
> facts based on their names.
>
> Let say I have two types of facts; one representing the information that an
> item (with a given name) exists, and the other one representing a list of
> items (e.g., as a list of names in a multislot). It could be something like
> this:
>
>   (deftemplate item (slot name))
>   (deftemplate bag-of-items (multislot names))
>
>   (assert (item (name A))
>   (assert (bag-of-items (names A B))
>
> What I am trying to write is a rule that would, for any bag-of-items fact,
> fire if all the items listed in the multislot 'name' are item facts that
> have been asserted.
>
> I am wondering if there is an easy way to do that, or if I'll need to hack
> my way through it with loops and tests in the LHS of my rule.
>
> Any suggestion?
> Best,
> Aurélien
>
>
>
> --
> View this message in context:
> http://jess.2305737.n4.nabble.com/Dynamic-rule-matching-in-the-LHS-tp4654176.html
> Sent from the Jess mailing list archive at Nabble.com.
>
>
> --------------------------------------------------------------------
> To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
> in the BODY of a message to majord...@sandia.gov, NOT to the list
> (use your own address!) List problems? Notify owner-jess-us...@sandia.gov

Reply via email to