Also consider map-indexed if you just need to count how many things go
through a lazy seq. It works like map, but takes a (fn [idx itm] ...) where
idx is the index of the item in the overall seq.
On Mon, Sep 12, 2016 at 3:10 PM, Gary Johnson
wrote:
> Almost right. The
Almost right. The iterate function is an infinite sequence generator, so
(count (iterate f x)) will never return.
If you want the iteration to terminate when cond is false (as in your
original example), you're looking for this:
(count (take-while cond (iterate (fn [[a b]] ... [new-a new-b])
Thanks for helping me!
In your first example:
(first (drop n (iterate (fn [[a b]] ... [new-a new-b]
Given that iterate will return a sequence whose length is the number of
iteration i'm looking for, the "(first (drop n" part will return one
element of this sequence (depending on n value),
Thanks, i like the "unambiguous intent" argument from your post, and indeed
i met the stack-overflow issue.
On Friday, September 9, 2016 at 2:28:46 PM UTC+2, Stuart Sierra wrote:
>
> loop/recur is more typical for this kind of counting loop, as it avoids
> the risk of a stack-overflow when the
Generally speaking, `loop`, `recur`, and writing recursive functions are
not idiomatic in Clojure. Using things like `iterate`, `map`, and `filter`
are considered clearer.
If `n` is used just to count iterations, then `iterate` would be useful.
e.g.
(first (drop n (iterate (fn [[a b]] ...
loop/recur is more typical for this kind of counting loop, as it avoids the
risk of a stack-overflow when the number of iterations is high.
Also, I recommend against the [a b & [n]] argument pattern here:
https://stuartsierra.com/2015/06/01/clojure-donts-optional-arguments-with-varargs
–S
On
Hi,
I'm just stating to learn clojure, i made a first read of "clojure
programming" to get the big picture, and i'm starting to play with the
repl, trying to solve some katas. A lot of theses katas involves returning
the count of loop iterations. Most of the time, i end up with this kind of