jess-users  

Re: JESS: defquery parameters

Wolfgang Laun
Mon, 16 Nov 2009 04:00:17 -0800

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