I am a newbie and was doing some exercises when I ran across something that 
I don't understand.
I am trying to count the number of elements in an array less than 100.

My first attempt didn't work. The counter returns 0

(let [a (atom 0)
      i (take-while (fn[x] (swap! a inc) (< x 100))  [1 2 3 4 5])]
  [@a i])  => [0 (1 2 3 4 5)]


I am not getting any insight from the source 
<http://clojuredocs.org/clojure_core/clojure.core/take-while>of 
'take-while' too. 
The strange thing is, if I set a break-point, I can see that the atom is 
getting incremented.

(let [a (atom 0)
      i (take-while (fn[x] (swap! a inc) *(swank.core/break) *(< x 100)) 
 [1 2 3 4 5])]
  [@a i])

whereas if I do this in a slightly more roundabout way, it works!

(let [a (atom 0)
      i (reduce
         (fn[l in]
           (if (or (nil? (last l)) (< (last l) 100))
             ((fn[] (swap! a inc) (conj l in)))
             l )) [] [1 2 3 4 5])]  
  [@a i]) => [5 [1 2 3 4 5]]

I tried reading docs, but I am unable to understand what is happening. If 
anyone could please point me in the right direction, it would be great.
Thanks in advance
Vinay

-- 
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

Reply via email to