Doh. Disregard my code example. :-) The reasoning is correct however.

Stuart

> Hi
>
> On Tue, Jan 20, 2009 at 7:01 AM, Stuart Halloway
> <stuart.hallo...@gmail.com> wrote:
>>
>> Lazy evaluation is a harsh mistress.
>>
>> user=> (def b1 (binding [*num* 1024] (f1)))
>> #'user/b1
>> user=> (def b2 (binding [*num* 1024] (f1)))
>> #'user/b2
>
> Did you mean b1 and b2 to have the same definition?  If so, I don't
> understand what you are trying to demonstrate by doing that.
>
>> user=> b1
>> (16)
>> user=> b2
>> (16)
>>
>> The difference between the example above and your example is the
>> interaction with the REPL. Your f1 is lazy, and is not realized until
>> outside the binding, when the REPL needs it. Your f2, also lazy, is
>> realized inside the binding because of the call to first.
>
> I thought this stuff was supposed to be easier to reason about! :)
> Would it perhaps make sense to save the environment that f1 was called
> in and use that during the realisation of its result?  That would seem
> to be far more sensible, but maybe there's a reason it would not work.
>
> How would one go about fixing f1 (or b1)?
>
> --  
> Michael Wood <esiot...@gmail.com>
>
> >


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