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