Re: JESS: defquery parameters
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.govwrote: 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 9012ejfr...@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.
Re: JESS: defquery parameters
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.comwrote: 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.govwrote: 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 9012ejfr...@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 .
Re: JESS: defquery parameters
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 9012ejfr...@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 9012ejfr...@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.
Re: JESS: defquery parameters
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 9012ejfr...@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.