Hi Andy,

I think Mr. Reeves gave you some excellent reasons to avoid using local 
mutable state, especially when trying to learn functional programming. If 
you're interested in seeing a spoiler for 114 you can look at one approach 
below (if you don't want a spoiler, then close this tab post-haste! ;-)

(fn my-take-while [n pred coll]
  (lazy-seq
    (let [first-element (first coll)
          n (if (pred first-element) (dec n) n)]
      (when (> n 0)
        (cons first-element (my-take-while n pred (rest coll)))))))

Cheers, 
James

On Thursday, March 20, 2014 8:34:20 PM UTC+1, Andy Smith wrote:
>
>
> Is is very bad form to use local mutable state to solve problems like :
>
> https://www.4clojure.com/problem/114
>
> i.e. 
>
> (fn [n f xs] (let [c (atom 0)] (take-while #(if (f %) (> n (swap! c inc)) 
> true) xs)))
>
> If so, what is the strongest reason to reject this kind of code? Since its 
> a local atom it ought to be thread-safe right?
>
> Thanks
>
> Andy
>

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