Hi jess-users;
I tried to imlement the yesterdays solution given by
Ernest Friedman-Hill.
I faced th eproblem once again.
I have given my example fo truncated code here, so that any body can help me
to correct the code and achieve the result.
Thank you
RagJag
----------------------------------------------------------------
(deftemplate status (multislot conditions))
(defrule testing
; (imp-con2 ?count)
?f1 <- (status (conditions $?conditions))
; (test (eq unknown (nth $?conditions ?count) ))
=>
(printout t "Enter Count: " )
(bind ?maxcount (read))
(bind ?count 1)
(while (<= ?count ?maxcount)
(printout t "enter YES/NO : ")
(bind $?conditions (create$ ?conditions (read)))
(bind ?count (+ 1 ?count))
(printout t " values COUNT --> " ?count crlf)
)
(assert (status (conditions ?conditions)))
(printout t " values --> " ?conditions crlf)
)
(defrule foo
(important-condition ?index)
(status (conditions $?x))
(test (eq YES (nth $?x ?index)))
=>
(pintout t "INDEX" ?index ?x crlf)
)
(defrule initial
=>
(assert (status (conditions unknown )))
)
(reset)
(watch all)
(run)
----------------------------------------------------------
>
>Hi,
>
>N.B. to all: there's been a recent trend of CC-ing me on every message
>that goes to the list. Please don't do this; I am a list subscriber too.
>
>
>Anyway, you match a given position in a multifield just by putting
>multiple variables into the slot - i.e.,
>
>(defrule foo
> (status (conditions ? ? ?x $?))
> ...
>
>will bind ?x to the third entry in the multislot. Here I've used blank
>variables for the first and last entries since I don't care what they
>are.
>
>Now, if you don't know the position until runtime, then you can't
>really use matching like this. You can use 'test' this way:
>
>
>(defrule foo
> (important-condition ?index)
> (status (conditions $?x))
> (test (eq YES (nth $?x ?index)))
> =>
>
>this lets you test the ?index-th element of the conditions.
>
>
>
>
>By the way, I can't quite figure out what the rule below is supposed
>to do, but note that it will only match 'status' facts with just one
>element in the conditions slot (because you use a single variable to
>match it.) If you want to match all contents of a multislot, you have
>to use a multifield variable ($?conditions) .
>
>
>
>I think Raghavendra Jagirdar wrote:
> > Hello Jess users;
> >
> > Any body knows how to use 'test' function for a specific nth$ string in
> > multislot.
> >
> > example:
> >
> > (deftemplate status (multislot conditions))
> >
> > (defrule .......
> > ?f1 (status (conditions ?conditions))
> > =>
> > (bind ?conditions (create$ (read)))
> > ......
> > (assert (status (conditions ?conditions)))
> > )
> >
> > Say, the asserted values in condition are (YES NO NO YES ...)
> >
> > In another rule, I wanted to do certain actions based on the values, and
>its
> > position in condition. For this I wanted to use
> > 'test' functionality by comparing the value and its position.
> >
> > Or can I achieve this by some other means.
> >
> > Thank you in advance
> > Raghavendra
> >
> > ________________________________________________________________________
> > Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.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]
> > ---------------------------------------------------------------------
> >
>
>
>
>---------------------------------------------------------
>Ernest Friedman-Hill
>Distributed Systems Research Phone: (925) 294-2154
>Sandia National Labs FAX: (925) 294-2234
>Org. 8920, MS 9012 [EMAIL PROTECTED]
>PO Box 969 http://herzberg.ca.sandia.gov
>Livermore, CA 94550
________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.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]
---------------------------------------------------------------------