Hi Wolfgang,

Thank you for all of your help. I finally got the rule to work as I wanted:

  (defrule model-completion-example
    (BooleanPropertyImpl (OBJECT ?property))
    (PageImpl (OBJECT ?container))
    (test ((?container getChildren) contains ?property))
    (test (eq (?property getEditor) nil))
    =>
    ...
  )

Cheers
Jevon

On Tue, Mar 8, 2011 at 9:06 PM, Wolfgang Laun <wolfgang.l...@gmail.com> wrote:
> 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.
>> --------------------------------------------------------------------
>>
>
>




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