That clears things up completely. Thanks for the help, everybody!

On Monday, April 22, 2013 10:48:11 PM UTC-4, tbc++ wrote:
>
> To simplify the problem:
>
> ((binding [*funkybind* true]
>   (fn [] *funkybind*)))
>
> This is the same problem as your lazy-seq example. The issue is that 
> *funky-bind* is not deref'ed when the anonymous fn is created, but when it 
> is executed. In this example, by the time the fn is executed, *funkybind* 
> has reverted back to its old state.
>
> Timothy
>
>
> On Mon, Apr 22, 2013 at 8:08 PM, Carlo Zancanaro 
> <carloza...@gmail.com<javascript:>
> > wrote:
>
>> If you want to capture the binding and have laziness together you can 
>> also use `bound-fn`.
>>
>> (binding [*funkybind* true] (map (fn [_] *funkybind*) [0 1]))
>> ;=> (false false)
>> (binding [*funkybind* true] (map (bound-fn [_] *funkybind*) [0 1]))
>> ;=> (true true)
>>
>>
>> On Tue, Apr 23, 2013 at 11:52 AM, Travis Vachon 
>> <travis...@gmail.com<javascript:>
>> > wrote:
>>
>>> Hi Daniel
>>>
>>> map is creating a lazy seq, which isn't evaluated until the REPL's
>>> forces it to be printed, which is outside the scope of the binding.
>>>
>>> This:
>>>
>>> (binding [*funkybind* true]
>>>   (doall (map (fn [_] *funkybind*) [1 2])))
>>>
>>> forces evaluation inside the binding, and does what you want.
>>>
>>> This is something I've been bitten by a few times, but the power that
>>> lazyness brings ends up being worth it, IMHO.
>>>
>>> Good luck!
>>>
>>> Travis
>>>
>>> On Mon, Apr 22, 2013 at 9:41 PM, Daniel Higginbotham
>>> <nonrec...@gmail.com <javascript:>> wrote:
>>> > I've encountered a situation where the binding function doesn't work 
>>> as I
>>> > expect it:
>>> >
>>> > user> (def ^:dynamic *funkybind* false)
>>> >
>>> > ;; expected
>>> > user> (binding [*funkybind* true]
>>> >   *funkybind*)
>>> > true
>>> >
>>> > ;;expected
>>> > (binding [*funkybind* true]
>>> >   ((fn [] *funkybind*)))
>>> > true
>>> >
>>> > ;;... huh?
>>> > (binding [*funkybind* true]
>>> >   (map (fn [_] *funkybind*) [1 2]))
>>> > (false false)
>>> >
>>> > In the last example, why is the value of *funkybind* false instead of 
>>> true?
>>> >
>>> > Thanks!
>>> > Daniel
>>> >
>>> > --
>>> > --
>>> > You received this message because you are subscribed to the Google
>>> > Groups "Clojure" group.
>>> > To post to this group, send email to clo...@googlegroups.com<javascript:>
>>> > Note that posts from new members are moderated - please be patient 
>>> with your
>>> > first post.
>>> > To unsubscribe from this group, send email to
>>> > clojure+u...@googlegroups.com <javascript:>
>>> > 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+u...@googlegroups.com <javascript:>.
>>> > For more options, visit https://groups.google.com/groups/opt_out.
>>> >
>>> >
>>>
>>> --
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@googlegroups.com<javascript:>
>>> Note that posts from new members are moderated - please be patient with 
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+u...@googlegroups.com <javascript:>
>>> 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+u...@googlegroups.com <javascript:>.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>  -- 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com<javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> 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+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
>>
>
>
>
> -- 
> “One of the main causes of the fall of the Roman Empire was that–lacking 
> zero–they had no way to indicate successful termination of their C 
> programs.”
> (Robert Firth) 
>

-- 
-- 
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/groups/opt_out.


Reply via email to