Hi all,
Thanks a lot all for your great answers and suggestions. I have changed the
template n corresponding as below, and both scenarios are working perfectly
fine.
First Test: With Un-ordered Facts, and I was looking for this.
(deftemplate MAIN::opposite-of
(slot entity-A)
(slot entity-B))
(deffacts MAIN::opposites
(opposite-of (entity-A shore-1) (entity-B shore-2))
(opposite-of (entity-A shore-2) (entity-B shore-1)))
, and accordingly all rules having the opposite-of condition check (part of
other condition check)
(opposite-of (entity-A ?fs)
(entity-B ?ns)
Second Test: Explicit Ordered Template (As also mentioned inside the JESS
document, and just wanted to know - how the template needs to be)
(deftemplate MAIN::opposite-of
(declare (ordered TRUE)))
(deffacts MAIN::opposites
(opposite-of shore-1 shore-2)
(opposite-of shore-2 shore-1))
, and accordingly all rules having the opposite-of condition check
(opposite-of ?fs ?ns)
Thanks again.
Regards
DEBASISH DALUI (122816)
-----------------------------------
BFS - Technology Solutions Group,
Cognizant Technology Solutions,
Cell: +91 9674069478
Office: +91-33-44306060; VNet: 306063
-----Original Message-----
From: [email protected] [mailto:[email protected]] On
Behalf Of Ernest Friedman-Hill
Sent: Monday, November 22, 2010 7:33 PM
To: jess-users
Subject: Re: JESS: representation of deftemplate from deffacts
On Nov 22, 2010, at 3:38 AM, [email protected] 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 [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].
--------------------------------------------------------------------
This e-mail and any files transmitted with it are for the sole use of the
intended recipient(s) and may contain confidential and privileged information.
If you are not the intended recipient, please contact the sender by reply
e-mail and destroy all copies of the original message.
Any unauthorised review, use, disclosure, dissemination, forwarding, printing
or copying of this email or any action taken in reliance on this e-mail is
strictly
prohibited and may be unlawful.
--------------------------------------------------------------------
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].
--------------------------------------------------------------------