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