Hi Dr Hill,
I just read your eg on queries at
http://herzberg.ca.sandia.gov/jess/docs/61/language.html#queries

Im wonder if it's possible to search query via the fact's name instead of
its slots and multislots


*****This is my "program-cardio" and "user" fact template 
(deftemplate program-cardio
(slot ident)
(slot stageA-intesity%)
(slot stageA-duration-wks)
        (slot stageB-intesity%)
        (slot stageB-duration-wks)      );;close

(deftemplate user
(slot answer)   );;close


****this is my rule that asserts "program-cardion" fact if the user answer
is "poor" 
(defrule recommend-program-poor
(user (answer poor))
=> (assert (program-cardio      (ident cardio-low)      
                                (stageA-intesity% 30)   (stageA-duration-wks 3)
                                (stageB-intesity% 50)   (stageB-duration-wks 
5)))
(printout t " Jess: recommends low-cardio running schedule " )  );close


****** This is my query search taken from
http://herzberg.ca.sandia.gov/jess/docs/61/language.html#queries 
(defquery search 
(declare (variables  ?tofind ))
(program-cardio (ident ?tofind)
        (stageA-intesity% ?a-int)       (stageA-duration-wks ?a-wks)
        (stageB-intesity% ?b-int)       (stageB-duration-wks ?b-wks)))


I try to replace  "program-cardio" with ?tofind but I will get an error. Is
there a way for me to query facts via its own name? like 

(defquery search 
(declare (variables  ?tofind ))
( ?tofind (ident ?id)
        (stageA-intesity% ?a-int)       (stageA-duration-wks ?a-wks)
        (stageB-intesity% ?b-int)       (stageB-duration-wks ?b-wks)))

below is the java code to run it, I need to replace "cardio-low"  with
"program-cardio"

//...
        engine.store("RESULT", engine.runQuery("search",
                        new ValueVector().add(new Value("cardio-low" ,
RU.ATOM))));
      
        engine.executeCommand("(store RESULT (run-query search
cardio-low))");
                
                // Fetch the result (an Iterator).
        Iterator e = (Iterator)
engine.fetch("RESULT").externalAddressValue(null);
//...

Thank you very much
rick

***************************************************************************


Ernest Friedman-Hill wrote:
> 
> It would be helpful, I think, if you told us what you wanted to do in  
> terms of business logic, rather than as "how do I do X in Jess",  
> because the questions you really need answered are about the proper  
> way to use Jess itself.
> 
> In this case, note that if you used Rete.assertString() instead of  
> executeCommand() to assert the fact, then that method returns the  
> jess.Fact object itself. You can then get the individual slot values  
> from that Fact object using its getSlotValue() method. But it's a  
> mystery to me why you want to do this -- you've just asserted the  
> fact, so why would you want to look at it?
> 
> The proper way to find facts that are created as a result of running  
> some rules is to use a defquery, as detailed in the "TekMart" section  
> of the book.
> 
> 
> On Mar 20, 2007, at 4:34 AM, ricktee wrote:
> 
>>
>> Good day,
>>
>> Im using java to load the "cardio.clp" file then java ex-commend a  
>> string to
>> create ththe following fact in jess.
>>
>> (program-cardio
>> (ident cardio-low)
>>          (cond-inte 40)   (cond-dura  6)
>>          (impr-inte 70)    (impr-dura 20)
>>          (main-inte 70)   (main-dura  1)))
>>
>> I read in the "Jess in action" book (p311) there is a  
>> "findFactByFact()"
>> method, but I dont know how to use it. Can you please help me? How  
>> do I get
>> the (program-cardio) fact out of Jess? Is ValueVector the correct  
>> format to
>> store the fact? Or should I use vectors?
>>
>> And is there a way to auto format the retrieved fact in a array for  
>> easy
>> using? Or something similar? Like-
>>
>> String [] [] cardio_program = {
>> ("ident", "cardio-low"),
>> ("cond-inte", "40"),    ("cond-dura", "6"),
>> ("impr-inte",  "70"),    ("impr-dura", "20"),
>> ("main-inte", "70"),   ("main-dura",  "1")  }
>>
>> The "cond-inte 40" stands for "conditioning intensity at 40%" which Im
>> suppose to use it for some java caculation.
>>
>> Thank you very much for your help
>> rick
>>
>>
>> Below is the scale down program
>> http://www.geocities.com/t_web_design/TestFrame.java
>> http://www.geocities.com/t_web_design/cardio.txt
>>
>> ********************************************************************** 
>> ******
>> //TestFrame.java
>>
>> import jess.*;
>> import java.util.*;
>>
>> public class TestFrame{
>> private static Rete engine;
>>
>> public static void main(String[] args)
>> {
>>      String assert_fact = "(assert (program-cardio (ident cardio-low) 
>> (cond-inte
>> 40)  (cond-dura  6)(impr-inte 70)  (impr-dura 20)(main-inte 70)   
>> (main-dura
>> 1))  )";
>>
>>      try
>>      {       
>>              engine = new Rete();
>>              engine.reset();
>>              engine.batch("cardio.clp");
>>              engine.reset();
>>              
>>              engine.executeCommand(assert_fact);
>>              engine.run();
>>              
>>              ValueVector get_fact = engine.findFactByFact("program-cardio");
>>              Vector temp                  = 
>> get_fact.factValue(engine.getGlobalContext());
>>      }
>>              
>>      catch (JessException ex)
>>      {       System.err.println("ERROR");    }
>>
>> } //close main
>> }
>>
>> ********************************************************************** 
>> *********
>> ;; cardio.clp
>>
>> ;;;; template for a cardio exercise program ;;;;
>>
>> (deftemplate program-cardio
>> (slot ident)
>> (slot cond-inte)
>> (slot cond-dura)
>>      (slot impr-inte)
>>      (slot impr-dura)
>>              (slot main-inte)
>>              (slot main-dura)        
>> (slot explanation)           );;close
>>
>>
>> ;;;; rule , to say the fact has been created by Java ;;;;;;;;
>> (defrule access-by-java
>> (program-cardio (ident cardio-low))
>> =>
>> (printout t "The jess file has been accessed by Java, (program- 
>> cardio) fact
>> created" crlf ) );;close
>>
>>
>> -- 
>> View this message in context: http://www.nabble.com/Retrieve-Fact- 
>> from-Java-tf3432213.html#a9567941
>> Sent from the Jess mailing list archive at Nabble.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 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]
> --------------------------------------------------------------------
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Retrieve-Fact-from-Java-tf3432213.html#a9586867
Sent from the Jess mailing list archive at Nabble.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]
--------------------------------------------------------------------

Reply via email to