Replies: 1 comment 2 replies
-
I'm not sure I agree this is 'wrong'. If you write (loop [i :in [1 2 3 4]
:while (< i 3)
:before (printf "before i: %p" i)
j :in [100 200 400]
:while (not= (* i j) 600)]
(printf "i: %p j: %p *: %p" i j (* i j))) the output is
So the |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Using
(break)
within a loop with multiple bindings gives surprising (to me) behavior. The documentation for(break)
as a special form does specify that it only breaks from the innermost while loop. And a loop with multiple nesting expands into nested while expressions.So to break out of the whole loop the usage of
(prompt :label ... (loop [...] (return :label res) ...))
or something similar is needed.For writing user code this requires some attention, but it is not insurmountable. But I believe for some Janet API code that uses
(break)
within aloop
with multiple bindings it is wrong:The
:modifier
:while
expands to use(break)
within nested while expressions causing the following behavior:Would it be an option to add
(breakloop)
or something similar for fixing the:while
modifier and to make it available as "easier"/"lower cost" option to break out of a loop with multiple bindings?Beta Was this translation helpful? Give feedback.
All reactions