Hi NIcolas,
A rule like this seems to work for me:
(defrule greatest-one-smallest-two
"Find the My-Template with greatest index1 and smallest index2"
(MAIN::My-Template (id ?id1)(index1 ?i1_1)(index2 ?i1_2))
(not (MAIN::My-Template
(id ~?id1)
(index1 ?i2_1&:(>= ?i2_1 ?i1_1))
(index2 ?i2_2&:(< ?i2_2 ?i1_2 ))))
=>
(printout t
"No My-Template fact has both a larger index1 and a smallest index2
than fact # " ?id1 crlf)
(printout t
" index1: " ?i1_1 " index2: " ?i1_2 crlf))
It seems a bit more complicated if you want to hunt for a particular fact
with the highest index1 and lowest index2 among all instances of an
arbitrary number of fact templates (i.e., my-template, queue, etc.) that
share these two slots in common.
Would you describe what your goal is and perhaps we can suggest a better
approach?
Cheers,
Jason
----
Morris Technical Solutions LLC
[EMAIL PROTECTED]
On 10/17/07, Nicolas Fortin <[EMAIL PROTECTED]> wrote:
>
>
>
> Hello everybody,
>
>
>
> Suppose that I have the following template:
>
>
>
> (deftemplate MAIN::My-Template
>
> (slot id (type INTEGER))
>
> (slot index1 (type INTEGER))
>
> (slot index2 (type INTEGER)))
>
>
>
>
>
> I want a rule that would be activated by the fact with the greatest index1
*and* the smallest index2. Note that index1 and index2 *are not* unique.
>
>
>
>
>
> So let's say that these facts are in the working memory:
>
> (assert (MAIN::My-Template
>
> (id 1) (index1 1) (index2 0))
>
> (assert (MAIN::Queue
>
> (id 2) (index1 1) (index2 0))
>
> (assert (MAIN::Queue
>
> (id 3) (index1 0) (index2 0))
>
>
>
>
>
> The rule would fire either with the first (id 1) or second (id 2) fact.
>
>
>
> And now let's say that these facts are in the working memory:
>
> (assert (MAIN::My-Template
>
> (id 1) (index1 1) (index2 -1))
>
> (assert (MAIN::Queue
>
> (id 2) (index1 1) (index2 0))
>
> (assert (MAIN::Queue
>
> (id 3) (index1 0) (index2 0))
>
>
>
>
>
> The rule would fire only with the first fact (id 1).
>
>
>
>
>
> How can I write this kind of rule?
>
>
>
>
>
> Thanks in advance.
>
>
> Nicolas
>
> ________________________________
Envoie un sourire, fais rire, amuse-toi! Employez-le maintenant!
--
-----------------------------------------------------------
Jason Morris
Morris Technical Solutions LLC
http://www.morris-technical-solutions.com