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