16.70 and 16.71 probably shouldn't mention return at all; this was indeed leading me up the garden path. (I was thinking of (for) and (foreach) as some inline function definition plus call, and that's why you can use return to break from them.)

Ernest Friedman-Hill wrote:

I think you'll find that any of the loops below will work fine in a context where "return" has a defined meaning: in particular, in a deffunction or the RHS of a defrule. I could weasel out of this by calling this "undefined behavior", as returning from a loop at the prompt has no useful meaning -- there's no higher level to return to. But thanks for the report -- return should just be equivalent to "break" when called in a context like this, so this should be fixed.

On Jun 11, 2007, at 3:42 AM, Wolfgang Laun wrote:

Jess Version 7.0p1 12/21/2006

Using return to break a (for) or (foreach) is documented behaviour. (It isn't for (while), but perhaps this is just an omission in the documentation.)

However:

;; Using return to exit from a loop confuses Jess.
;; Loops won't work any more. A (clear) appears to remove the fault.

;; for + return
(for (bind ?i 0) (< ?i 5) (++ ?i)
   (if (= ?i 3)
       then (return huhu))
   (printout t "i=" ?i crlf ) )

;; foreach + return
(foreach ?el (create$ 1 5 10 50 100)
   (if (= ?el 10)
       then (return huhu))
   (printout t "el=" ?el crlf ))

;; while + return
(bind ?i 0)
(while (<= ?i 3)
   do
   (if (= ?i 2) then (return huhu))
   (printout t "i=" ?i crlf )
   (++ ?i) )

;; for instance:

Jess> (for (bind ?i 0) (< ?i 5) (++ ?i) (if (= ?i 3) then (return huhu)) (printout t "i=" ?i crlf ) )
i=0
i=1
i=2
huhu
Jess> (for (bind ?i 0) (< ?i 5) (++ ?i) (if (= ?i 3) then (return huhu)) (printout t "i=" ?i crlf ) )
huhu
Jess>

(clear)

Jess> (foreach ?el (create$ 1 5 10 100) (if (= ?el 10) then (return huhu)) (printout t "el=" ?el crlf ) )
el=1
el=5
huhu
Jess> (foreach ?el (create$ 1 5 10 100) (if (= ?el 10) then (return huhu)) (printout t "el=" ?el crlf ) )
huhu
Jess>

(clear)

Jess> (bind ?i 0)
0
Jess> (while (<= ?i 3) do (if (= ?i 2) then (return huhu)) (printout t "i=" ?i crlf ) (++ ?i) )
i=0
i=1
huhu
Jess> (bind ?i 0)
0
Jess> (while (<= ?i 3) do (if (= ?i 2) then (return huhu)) (printout t "i=" ?i crlf ) (++ ?i) )
huhu
Jess>

Kind regards
Wolfgang


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


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

Reply via email to