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]] ... [new-a new-b]))))

If `n` is used in the computation to create new-a and new-b, then `reduce`
 and `range` would be useful.

(reduce (fn [[a b] n]
                ...
                [new-a new-b])
             [a b]
             (range n))

It might be possible to use `map-indexed` with `repeat`, also.

-Jason


On Fri, Sep 9, 2016 at 8:28 AM, Stuart Sierra <the.stuart.sie...@gmail.com>
wrote:

> 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 Friday, September 9, 2016 at 8:02:14 AM UTC-4, Joeyjoejoe wrote:
>>
>> 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
>> functions:
>>
>> (defn my-function [a b & [n]]
>>  (if cond
>>    (my-function new-a new-b (inc (or n 0))
>>    (or n defaut-value)
>>   )
>> )
>>
>> What are the pros/cons of doing this? Are there any idiomatic ways of
>> doing this.
>>
>> Thank you
>>
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to