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), and not the number of iteration. Am i right?
Maybe i could do this, to get the number of iteration: Thank you again (count (iterate (fn [[a b]] ... [new-a new-b])))) On Friday, September 9, 2016 at 3:00:31 PM UTC+2, Jason Felice wrote: > > 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.stua...@gmail.com > <javascript:>> 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 clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> 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.