Re: JESS: How do I assert ordered facts from a map

"Ernest Friedman-Hill" <[email protected]>
Newsgroups gmane.comp.java.jess
Message-ID <[email protected]>
Java classes are totally optional in Jess -- in fact, templates and  
facts created directly from the Jess language are always more efficient.

If Jess were to store the properties of an object in a Map -- so that  
they were dynamic and extensible at runtime -- then it would be  
considerably slower, for the same reason that fully dynamic languages  
in which objects are maps of code and variables are slower than  
compiled languages. Construction of a fast Rete network requires  
knowing what properties are being dealt with. Think of a database in  
which all the data was stored as object-attribute-value triples --  
would it be as fast as a database with fixed tables and columns?


On Aug 13, 2010, at 11:41 AM, Donald Winston wrote:

> So I have to create a template and know all the identifiers before  
> loading data into the fact base? This means I'll have to create java  
> bean objects for all my data. Every time the data changes I'll have  
> to modify the java classes. I don't believe in creating objects for  
> things that have little or no behavior. That's what Maps and Lists   
> are for.
>
> I suppose I could generate a "init-facts.clp" file when my app  
> starts up and load it along with the rules.
>
> On Aug 13, 2010, at 11:18 AM, Ernest Friedman-Hill wrote:
>
>> Basically for the same reason that you can't say something like  
>> this in Java:
>>
>> String theMethodName = "toString";
>> String myString = myObject.(theMethodName)();
>>
>> but instead you have to use reflection to find the method  
>> "toString" and call it using the Method object. The compiler needs  
>> to know the correct template to use to compile the code, and it  
>> can't do that if the name of the template is in a variable.
>>
>> Now, you may ask *could* it work the way you want? Indeed, it could  
>> -- but it doesn't at this time. We've talked in the past about  
>> allowing this kind of thing, and it has its pros and cons.
>>
>>
>> On Aug 13, 2010, at 11:05 AM, Donald Winston wrote:
>>
>>> Can anyone explain to me why this does not work? Why can't I use
>>>
>>> (deffacts initial-facts
>>> "Facts to trigger a few appropriate salient initialization rules."
>>> (assert-request-parameters))
>>>
>>> (defrule assert-request-parameters-rule
>>> "Assert stored data one time."
>>> (declare (salience 100))
>>> ?x <- (assert-request-parameters)
>>>       =>
>>> (foreach ?key (((fetch request-parameter-map) keySet) iterator)
>>>         (build str-cat "(assert (" ?key " " ((fetch request- 
>>> parameter-map) get ?key) "))"))
>>>          ; why not (assert (?key ((fetch request-parameter-map)  
>>> get ?key))))
>>>    (retract ?x))
>>>
>>> (bind ?map (new java.util.HashMap))
>>> (?map put one 1)
>>> (?map put two 2)
>>> (?map put three 3)
>>> (store request-parameter-map ?map)
>>> (reset)
>>> (facts)
>>> (run)
>>> (facts)
>>>
>>> Jess, the Rule Engine for the Java Platform
>>> Copyright (C) 2008 Sandia Corporation
>>> Jess Version 7.1p2 11/5/2008
>>>
>>> This copy of Jess will expire in 207 day(s).
>>> f-0   (MAIN::initial-fact)
>>> f-1   (MAIN::assert-request-parameters)
>>> For a total of 2 facts in module MAIN.
>>>
>>> f-0   (MAIN::initial-fact)
>>> For a total of 1 facts in module MAIN.
>>
>> ---------------------------------------------------------
>> Ernest Friedman-Hill
>> Informatics & Decision Sciences, Sandia National Laboratories
>> PO Box 969, MS 9012, 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] 
> .
> --------------------------------------------------------------------

---------------------------------------------------------
Ernest Friedman-Hill
Informatics & Decision Sciences          Phone: (925) 294-2154
Sandia National Labs
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].
--------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.