Also, if you want the behavior you describe, it's easy to get it in
the current approach, whereas if the REPL didn't consume lazy
sequences it would be very hard to get it to. Try:

(def myvar (filter even? (range))) ; prints the Var object
(nth myvar 10000) ; realizes the first 10,000 items in the seq
;; evaluating just myvar causes the REPL to realize the whole seq

On Sep 14, 9:33 am, Alan <a...@malloys.org> wrote:
> That would be very awkward:
>
> user=> (-> (range) (filter even?) (drop 10) (take 5))
> LazySeq
> user=> (-> (range) (filter even?) (drop 10) (take 5) first)
> 20
> user=> (-> (range) (filter even?) (drop 10) (take 5) second)
> 22
> .......
>
> On Sep 14, 5:20 am, Ranjit <rjcha...@gmail.com> wrote:
>
> > Thanks for clearing that up for me everyone. So the REPL itself acts
> > like a consumer of lazy sequences? Is there some logic behind that? I
> > guess I would have expected that the REPL would just return a
> > reference to a lazy expression rather than evaluate it.
>
> > Thanks,
>
> > -Ranjit
>
> > On Sep 13, 2:06 pm, Alan <a...@malloys.org> wrote:
>
> > > Ranjit, try the following to see it in action even at the REPL:
>
> > > (def xt (make-array Float/TYPE 3 3))
>
> > > (def myloop (for [x (range 3) y (range 3)] (aset xt x y 1)))
>
> > > (aget xt 1 1) ;; xt hasn't been changed
>
> > > myloop ;; force REPL to de-lazify
>
> > > (aget xt 1 1) ;; changed now
>
> > > On Sep 13, 9:28 am, Mark Nutter <manutte...@gmail.com> wrote:
>
> > > > Erg, gmail hiccup. Started to say if you try to use it in code that's
> > > > *not* being called from the REPL, you'll be scratching your head
> > > > trying to figure out why aset never gets called.
>
> > > > Mark
>
> > > > On Mon, Sep 13, 2010 at 12:27 PM, Mark Nutter <manutte...@gmail.com> 
> > > > wrote:
> > > > > The REPL automatically realizes the lazy sequence in the process of
> > > > > printing it out, but if you try to us
>
> > > > > On Mon, Sep 13, 2010 at 11:07 AM, Ranjit <rjcha...@gmail.com> wrote:
> > > > >> Thanks Armando for catching my stupid mistake. That fixed everything.
>
> > > > >> Meikel, I'm not sure I understand what you're saying. When I evaluate
> > > > >> this in the REPL
>
> > > > >> (for [x (range 2) y (range 2)] (aset xt x y (+ x y)))
> > > > >> (aget xt 0 0)
> > > > >> (aget xt 1 1)
>
> > > > >> I get back 0 and 2 as I expect. Isn't the call to aset consuming the
> > > > >> lazy sequence?
>
> > > > >> Thanks.
>
> > > > >> On Sep 13, 11:00 am, Meikel Brandmeyer <m...@kotka.de> wrote:
> > > > >>> Hi,
>
> > > > >>> On 13 Sep., 15:07, Ranjit Chacko <rjcha...@gmail.com> wrote:
>
> > > > >>> >     (for [x (range 3) y (range 3)] (aset xt x y 1))
>
> > > > >>> Note that that this will not do what you think it does. for creates 
> > > > >>> a
> > > > >>> lazy sequence which is thrown away immediately. So the aset calls 
> > > > >>> are
> > > > >>> never done. for is a list comprehension, not a looping construct.
> > > > >>> Replace for with doseq. As a rule of thumb: side-effects => command
> > > > >>> starting in "do".
>
> > > > >>> Sincerely
> > > > >>> Meikel
>
> > > > >> --
> > > > >> 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 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