e.g. (for [x (range 1000) :when (= (rem x) 1) :while (number of yields <= 10)]
so i want only the first 10 results.
Or should I just use (take 10 ) on the for ?
Michael
>
> Is it possible to use :while to shortcut a for macro when a certain
> number of yiels have happened?
>
> e.g. (for [x (range 1000) :when (= (rem x) 1) :while (number of
> yields <= 10)]
>
> so i want only the first 10 results.
you could:
(def zip (partial map vector))
and then use:
user> (for [[i x] (zip (iterate inc 0) (range 10 -10 -1))
:while (< i 5)]
x)
(10 9 8 7 6)
> Or should I just use (take 10 ) on the for ?
that's probably more readable and works just as well ;).
hth,
--Chris
>
> Is it possible to use :while to shortcut a for macro when a certain
> number of yiels have happened?
>
> e.g. (for [x (range 1000) :when (= (rem x) 1) :while (number of
> yields <= 10)]
>
> so i want only the first 10 results.
Is it possible? Yes...
(let [yields (ref 0)]
(for [x (range 1000) :when (when (odd? x) (dosync (ref-set yields
(inc @yields))) true) :while (<= @yields 10)] x)) =>
(1 3 5 7 9 11 13 15 17 19)
Is it advisable? No.
>
> Or should I just use (take 10 ) on the for ?
Definitely yes.
Aloha,
David Sletten