Do you want the check if your initial code is working correctly? Because
when I ran it, this is the output with 100 numbers:

(1 3 7 9 13 15 21 25 31 33 37 43 49 51 63 67 69 73 75 79 87 93 99)

I have modified it like this. I have highlighted what I have changed.:

(defn indexed-sieve [index this-list]
  (keep-indexed
   (fn [i v]
     (if (= 0 (mod (inc i) index))
       nil
       v))
   this-list))

(defn lucky-numbers [max-value]
  (let [current-list    *(atom (range 1 max-value)) *
        current-index   *(atom 2)*]
    (while (< @current-index (count @current-list))
      (reset! current-list (indexed-sieve *@current-index* @current-list))
      (reset! current-index (inc @current-index)))
    @current-list))

This give the following output:

(1 3 7 13 19 27 39 49 63 79 91)

This seems more correct.

You can further convert the while to loop recur to avoid using atoms.

On Wed, Feb 18, 2015 at 5:28 AM, Cecil Westerhof <cldwester...@gmail.com>
wrote:

> 2015-02-18 0:28 GMT+01:00 Steve Miner <stevemi...@gmail.com>:
>
>>
>> > On Feb 17, 2015, at 4:39 PM, Colin Jones <trptco...@gmail.com> wrote:
>> >
>> > Sounds almost like a mirror image of `clojure.core/take-nth`, so
>> something like this is kind of fun:
>> >
>> > (defn drop-nth [n coll]
>> >   (lazy-seq
>> >     (when-let [s (seq coll)]
>> >       (concat (take (dec n) s) (drop-nth n (drop n s))))))
>> >
>>
>> I like that drop-nth.  Here's my version of lucky:
>>
>> (defn lucky
>>   "Returns sequence of Lucky numbers less than max"
>>   ([max] (when (pos? max) (lucky 1 (range 1 max 2))))
>>   ([i acc]
>>    (if-let [n (nth acc i nil)]
>>      (recur (inc i) (drop-nth n acc))
>>      acc)))
>>
>> The recur in this case loops back to the top.
>>
>
> It looks good, but with 1000000 I get a stack overflow. And even with
> 100000. It takes also about two times as long to execute.
>
> --
> Cecil Westerhof
>
> --
> 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.

Reply via email to