On Nov 22, 2010, at 3:38 AM, debasish.da...@cognizant.com wrote:

Hi Jess-users,


Note that Jess comes with a fairly detailed manual, and it's worth reading it all the way through. Everything I'll cover here is explained in the manual.

Just trying to understand, how the following deffacts can represent in deftemplate?

(deffacts MAIN::opposites
  (opposite-of shore-1 shore-2)
  (opposite-of shore-2 shore-1))


There are two kinds of templates: ordered and unordered. These facts use an ordered template. You can tell because there are no slot names being used.


Jess is creating a *implied* template for this as below.
(deftemplate MAIN::opposite-of
   "(Implied)"
   (multislot __data))


Yes. Ordered templates are almost always created automatically by Jess, and their single multislot -- whose name is never normally displayed -- is named "__data". In fact, that's how Jess can tell which is an ordered template: because it has a single slot named __data.



Here the term *__data* is not very much clear, since if I keep this as template explicitly as follows –
(deftemplate MAIN::opposite-of
   (multislot __data))


Not sure what's not clear -- that's the name of the slot.



The ruleset is running fine as expected, and JESS is not creating again the *implied* template in this case.


Yes, because it already exists.


But, if I change it to some other name, say *data* instead of *__data*, JESS engine throwing a exception (Jess reported an error in routine Jesp.parseFact.)while parsing the above fact.


Yes, because when Jess parses the facts, it expects to find an ordered template by that name, but it does not: it finds an unordered template whose single multislot has some other name. There's no slot named __data, and so Jess has no idea how to use this template in this situation.


Also, if I create the template as follows using *slot*.
(deftemplate MAIN::opposite-of
(slot shore-1)
   (slot shore-2))

This is now an unordered template. For this kind of template, the slots names are always shown in facts and in rule patterns. You have to change everything.



But in this case, the deffacts needs to be defined as follows, which seems not same as mentioned above, and the rule is not working as expected.


Yes. If you change the data structure, then you have to change how the data is initialized, as well as changing the code that works with the data. This situation should be familiar in any programming language.

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

Reply via email to