jess-users  

Re: JESS: defquery parameters

Ernest Friedman-Hill
Mon, 16 Nov 2009 12:08:55 -0800

That is *really* clever. Sweet!

On Nov 16, 2009, at 10:59 AM, Wolfgang Laun wrote:

Given this deffunction:

(deffunction list2lambda ($?list)
    (return (eval (str-cat "(lambda (?arg) (return (eq (list "
                         (implode$ $?list)
                         ") ?arg)))" ))))

the run-query* call could even be written as simply as

  (run-query* q1 1 (list2lambda p q r ))

Ah, the beauty of Lisp ;-)
-W



On Mon, Nov 16, 2009 at 8:45 AM, Wolfgang Laun <wolfgang.l...@gmail.com > wrote: As a workaround, you can use a lambda for smuggling the list into the query:

(bind ?eq-pqr (lambda (?arg) (return (eq (list p q r) ?arg))) )

(defquery q1

 (declare (variables ?pa ?lam))
 (myfact (a ?pa) (b ?b) (c $?v &:(?lam $?v))
 )
)

-W


On Fri, Nov 13, 2009 at 7:04 PM, Ernest Friedman-Hill <ejfr...@sandia.gov > wrote: Hmmm. Indeed, you're right, and it's a limitation of the implementation, not easily lifted. I'll add it to the issues list.



On Nov 13, 2009, at 12:20 PM, Michael Welter wrote:

Can't a list be passed to defquery?

(deftemplate myfact
 (slot a)
 (slot b)
 (multislot c)
)

(deffacts f1
 (myfact (a 1)(b 1)(c (create$ p q c)))
 (myfact (a 1)(b 2)(c (create$ p q r)))
 (myfact (a 1)(b 3)(c (create$ p q z)))
)

(defquery q1
 (declare (variables ?pa ?pc))      ; $?pc throws an error
 (myfact
  (a ?pa)
  (b ?b)
  (c $?v&:(eq $?v $?pc))     ; won't work
  ;(c $?v&:(eq (nth$ 1 $?v) ?pc))     ; works
 )
)

(defrule r1
 (initial-fact)
=>
 (try
  (bind ?result (run-query* q1 1 (create$ p q r)))
 catch
  (printout t "query failed" crlf)
 )
 (while (?result next) do
  (printout t
    "b: " (?result getString b)
  crlf)
 )
)


Thanks


--------------------------------------------------------------------
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 .
--------------------------------------------------------------------

---------------------------------------------------------
Ernest Friedman-Hill
Informatics & Decision Sciences          Phone: (925) 294-2154
Sandia National Labs
PO Box 969, MS 9012                            ejfr...@sandia.gov
Livermore, CA 94550                             http://www.jessrules.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 .
--------------------------------------------------------------------




---------------------------------------------------------
Ernest Friedman-Hill
Informatics & Decision Sciences          Phone: (925) 294-2154
Sandia National Labs
PO Box 969, MS 9012                            ejfr...@sandia.gov
Livermore, CA 94550                             http://www.jessrules.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.
--------------------------------------------------------------------