In any programming language, you can rewrite a "for" loop as a
"while" loop. Jess is no exception.
(bind ?i 1)
(while (<= ?i (length$ ?*a*))
(printout t ?i crlf)
(bind ?i (+ ?i 1)))
On Jan 12, 2007, at 4:33 AM, Antonino Lo Bue (gmail) wrote:
Thanks, It's what I need, but, I need to implement this behaviour
in JESS
6.1, and "for" function it's not present... this is my problem.
How can I implement this using only JESS 6.1 features?
----------------------------------------------------------------------
--
Antonino Lo Bue
Research Fellow
ICAR-CNR Palermo
Phone: 091-6809256
Web: http://medialab.pa.icar.cnr.it/Personali/personali.html
Email: [EMAIL PROTECTED]
----- Original Message -----
From: "Ernest Friedman-Hill" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, January 11, 2007 1:45 PM
Subject: Re: JESS: list duplicate elements problem
All you're trying to do is print the integers from 1 to the length of
the list. Here's a "for" loop that does that:
(for (bind ?i 1) (<= ?i (length$ ?*a*)) (++ ?i)
(printout t ?i crlf))
Because your solution has to search the list, for long lists, the
performance would be rather bad, proportional to the square of the
length of the list. Presumably you want to do something with the list
items; you can do so by fetching each one inside the loop with the
"nth$" function, using ?i for the index. For example, this prints
only the indexes at which "bb" appears in the list:
(for (bind ?i 1) (<= ?i (length$ ?*a*)) (++ ?i)
(bind ?item (nth$ ?i ?*a*))
(if (eq ?item bb) then
(printout t ?i crlf)))
On Jan 11, 2007, at 7:10 AM, Antonino Lo Bue (gmail) wrote:
Hi everyone,
I've problems with list members position:
(defglobal ?*a* = (create$ aa aa))
thus I have the list: (aa aa)
I want to use member position, but if I write:
(foreach ?f ?*a* (printout t (member$ ?f ?*a*)crlf ))
I obtain:
1
1
Otherwise I want:
1
2
This problem is because member$ function find the index of a
element in list if this element exist in the list, thus if the
element is duplicate in the list member$ function find the first
element two times in the same position.
How can I obtain the position of an element in the list even if is
a duplicate?
--------------------------------------------------------------------
--
--
Antonino Lo Bue
Research Fellow
ICAR-CNR Palermo
Phone: 091-6809256
Web: http://medialab.pa.icar.cnr.it/Personali/personali.html
Email: [EMAIL PROTECTED]
---------------------------------------------------------
Ernest Friedman-Hill
Advanced Software Research Phone: (925) 294-2154
Sandia National Labs FAX: (925) 294-2234
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 owner-jess-
[EMAIL PROTECTED]
--------------------------------------------------------------------
--------------------------------------------------------------------
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 owner-jess-
[EMAIL PROTECTED]
--------------------------------------------------------------------
---------------------------------------------------------
Ernest Friedman-Hill
Advanced Software Research Phone: (925) 294-2154
Sandia National Labs FAX: (925) 294-2234
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]
--------------------------------------------------------------------