Even though this thread is almost over, I'll quickly chime in and hopefully
add some clarity.

I've only stumbled over for's :while because of this; I like it. It's the
only modifier in a for, that can actually stop evaluation of its source
sequence. It's akin to take-while.
Behold the generation of a triangular matrix (output formatting by me):

(for [x (range) :while (< x 10)
      y (range) :while (<= y x)]
  [x y])

=>(
[0 0]
[1 0] [1 1]
[2 0] [2 1] [2 2]
[3 0] [3 1] [3 2] [3 3]
[4 0] [4 1] [4 2] [4 3] [4 4]
[5 0] [5 1] [5 2] [5 3] [5 4] [5 5]
[6 0] [6 1] [6 2] [6 3] [6 4] [6 5] [6 6]
[7 0] [7 1] [7 2] [7 3] [7 4] [7 5] [7 6] [7 7]
[8 0] [8 1] [8 2] [8 3] [8 4] [8 5] [8 6] [8 7] [8 8]
[9 0] [9 1] [9 2] [9 3] [9 4] [9 5] [9 6] [9 7] [9 8] [9 9])

Notice, that (range) generates an infinite lazy sequence, which is only
stopped by virtue of :while.

The gist is: :when is akin to filter, :while is akin to take-while

kind regards

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to