As the message says: children is some Java thing, but not a Jess list. (A Java array would map to a Jess list.)
Use the Java method for testing membership: ( test ( (?container getChildren) contains ?property) ) -W On 8 March 2011 03:16, Jevon Wright <je...@jevon.org> wrote: > Hi all, > > Thanks for your suggestions Ernest and Wolfgang, they definitely > helped. I am now using the following rule: > > (defrule check-printout3 > (BooleanPropertyImpl (OBJECT ?property)) > (PageImpl (OBJECT ?container)) > (test > (member$ ?property (?container getChildren)) > ) > => > ((System.out) println "Property with a container:") > ((System.out) println ?property) > ((System.out) println "IN:") > ((System.out) println ?container) > ) > > However I am still having a problem with accessing the children of the > object. I now get the following error: > > Jess reported an error in routine Value.listValue > while executing (member$ ?property(0,4,-1) (call > ?container(1,6,-1) getChildren)) > while executing rule LHS (Node2) > while executing rule LHS (TECT). > Message: > '<Java-Object:org.eclipse.emf.ecore.util.EObjectContainmentEList>' > is JAVA_OBJECT, not a list. > at jess.Value.a(Unknown Source) > > As the message describes, PageImpl.getChildren() returns an > org.eclipse.emf.ecore.util.EObjectContainmentEList. However, this > object is an object that implements java.util.List and > java.util.Collection, and extends java.util.AbstractList [1]. > > Any suggestions on how to access the contents of this list? Or do I > need to write some form of a wrapper or translation layer? Thanks for > all your help. > > Jevon > > [1]: > http://download.eclipse.org/modeling/emf/emf/javadoc/2.4.2/org/eclipse/emf/ecore/util/EObjectContainmentEList.html > > On Sat, Mar 5, 2011 at 1:31 AM, Ernest Friedman-Hill <ejfr...@sandia.gov> > wrote: > > > > Hi Jevon, > > Read number 17 in our FAQ: http://www.jessrules.com/jess/FAQ.shtml#Q17 > > The right way to write your final rule might be something like this, > > depending on what kind of facts these are: > > (defrule debug-four > > (BooleanPropertyImpl (OBJECT ?property)) > > (PageImpl (OBJECT ?container)) > > (test (progn > > (bind ?children (get-member ?container children))) > > (member$ ?property ?children))) > > => > > ((System.out) println "...") > > ) > > > > On Mar 4, 2011, at 2:18 AM, Jevon Wright wrote: > > > > Hi all, > > > > I am trying to write a Jess rule program to perform inference on an > > EMF-based model instance. I can successfully load all of the model > > elements into Jess, and check that these facts all exist: > > > > (defrule debug-one > > ?property <- (BooleanPropertyImpl) > > => > > ((System.out) println "Found property:") > > ((System.out) println ?property) > > ) > > > > This rule works fine, and all of the BooleanPropertyImpl in the model > > are found successfully. But I am having trouble with accessing members > > of the elements, using either get-member, or call, or bind. > > > > (defrule debug-three > > ?container <- (BooleanPropertyImpl) > > (bind ?name (get-member ?container name)) > > => > > ((System.out) println "Found name:") > > ((System.out) println ?name) > > ) > > > > I expect this to bind object.getName() to ?name, but instead the parse > > fails: > > > > Jess reported an error in routine Jesp.parsePattern. > > Message: Bad slot value at token '('. > > Program text: ( defrule debug-three ?container <- ( > > BooleanPropertyImpl ) ( bind ?name ( at line 44 in file > > rules/jess-test.clp. > > at jess.Jesp.error(Unknown Source) > > > > What does this mean? Is this a syntax error? Is this an error with my > > Java objects? Am I missing a runtime library? Should I be importing > > other packages? I can't think of any other way to approach this > > problem. > > > > The reason I am using get-member is that I was trying to see if an > > elements' List contains another element: > > > > (defrule debug-four > > ?property <- (BooleanPropertyImpl) > > ?container <- (PageImpl) > > (bind ?children (get-member ?container children))) > > (member$ ?property ?children) > > => > > ((System.out) println "...") > > ) > > > > However, this also fails with the exception above. Any ideas or > > suggestions would be most welcome. :) > > > > Thanks > > Jevon > > > > > > -------------------------------------------------------------------- > > 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. > -------------------------------------------------------------------- > >