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.

Reply via email to