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.