Thank you very much for your help! The fact that a vector is an object too (with methods and properties and such) never occured to me. Thank you for opening my eyes... calling the contains method did the trick.

Bastian

Ernest Friedman-Hill wrote:

You can just treat the Vector as a Vector, and use its "contains" method:

(defquery my-query (declare (variables ?param))
   (myObject (myVector ?x&:(?x contains ?param) (id ?objectID)))

On 4/16/07, B. Tenbergen <[EMAIL PROTECTED]> wrote:

Hello everyone again,

so, I figured out that my problem is probably not solveable the way I
approached it. So, I thought, in order to query every single element in
the Vector (reminder: which is a property of a shadow fact) to check
whether or not it is equal to a given argument, I would need to query
the Vector as a multislots. But, Vectors of shadow facts are not
multislots. Arrays, however are. Before I continue and re-write the
whole object and change the Vectors to arrays, please let me know if my
train of thought here is wrong to begin with...

Following the Jess documentation, I could write a query that checks if
one given argument is in a multislot like this:
(defquery my-query (declare (variables ?param)) (myObject (myArray $?
?param $?) (id ?objectID)))

Running this query should give me every fact in the working memory that
has the variable param as an element in myArray, right?

As you might imagine, I would like to omit changing the object, so is
there another way to do that?

I am really sorry to bother all you guys with my problem, but I am
really eager to get this done, and looking into the Docs did not help me
further than that...

Have a great day,

Basti

Ernest Friedman-Hill wrote:

> If your Java object contains a Vector as a property, then it won't
> match a ValueVector; the Jess fact's slot will just contain the
> Vector. Since Vector implements equals(), the proper query parameter
> would be just "new Value(myVector)".
>
> The NPE is probably happening because you're not calling hasNext() on
> the QueryResult  first to check whether or not next() will advance to
> a valid record.
>
> On Apr 13, 2007, at 5:30 PM, B. Tenbergen wrote:
>
>> Hello List,
>>
>> I am not sure if I am using Jess right in my little application. I
>> have written some code to query an Java Object's (the objct was
>> asserted to Jess's Working Memory) variable that happens to be a
>> java.util.Vector. What I essentially want to do is to check if each
>> element in a given argument-list is element of the Vector of the
>> Java object.
>>
>> In order to do that, I believe that the argument-list needs to be
>> added to a ValueVector so that I can run a query*, right? The
>> argument-list must then be a Value of type RU.LIST. So, I add each
>> element of the argument-list to a ValueVector, create a Value by
>> using the constructor that takes a ValueVector and an int (i.e.
>> RU.LIST) and add that Value to a new ValueVector.
>> Is that the right procedure? It seems a little redunant to me to
>> create add a Value, that consists of a ValueVector to a ValueVector...
>>
>> However, here is some code I have written to accomplish this task.
>> The object looks like this:
>>
>> public class myObject {
>>
>> Vector<String> myVector = new Vector<String>();
>>
>> ...
>> }
>>
>> And here is the code, I wrote to query this vector:
>>
>> Rete r = new Rete();
>> myObject o = new myObject();
>>
>> r.defclass("myObject", "PATH/TO/myObject.class", null);
>> r.definstance("myObject", o, false);
>> r.eval("(defquery myQuery (declare (variables ?var)) (myObject
>> (myVector ?var) (crn ?crn)))");
>> ValueVector vv = new ValueVector();
>>
>>                for (int i = 0; i < parameters.length; i++) {
>>                    vv.add(new Value(parameters[i], RU.STRING));
>>                }
>>                              ValueVector vv2 = new ValueVector();
>>                vv2.add(new Value(vv, RU.LIST));
>>                              QueryResult result = r.runQueryStar
>> ("myQuery", vv2);
>>
>> "parameters" is the argument-list I have mentioned above.
>> The code compliles and executes. However, when I try to access the
>> QueryResult-object, I always get a NullPointerException.
>> Unfortunately, I am not sure if this is because I pass the wrong
>> ValueVector to the query of because none of the elements in the
>> argument-list are in the slot... (that argument-list is passed from
>> another program into my application and the Java object is created
>> elsewhere too, so I have no influence about it...).
>>
>> I would greatly appreciate any help that can tell me if I am on the
>> right track.
>> Thank you all very much in advance!
>>
>> Bastian
>>
>> --------------------------------------------------------------------
>> To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
>> in the BODY of a message to [EMAIL PROTECTED], NOT to the list
>> (use your own address!) List problems? Notify owner-jess-
>> [EMAIL PROTECTED]
>> --------------------------------------------------------------------
>
>
> ---------------------------------------------------------
> Ernest Friedman-Hill
> Advanced Software Research          Phone: (925) 294-2154
> Sandia National Labs                FAX:   (925) 294-2234
> PO Box 969, MS 9012                 [EMAIL PROTECTED]
> Livermore, CA 94550                 http://www.jessrules.com
>
> --------------------------------------------------------------------
> To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
> in the BODY of a message to [EMAIL PROTECTED], NOT to the list
> (use your own address!) List problems? Notify
> [EMAIL PROTECTED]
> --------------------------------------------------------------------
>
>

--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------



--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------




--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------

Reply via email to