On 26 Nov., 21:26, Chouser <[EMAIL PROTECTED]> wrote:
> On Wed, Nov 26, 2008 at 3:22 PM, Mark Volkmann
>
> <[EMAIL PROTECTED]> wrote:
>
> > I'm curious about this syntax. I thought if #(function-name args)
> > creates a closure then I can put one in a variable and execute it
> > laterI entered this in a REPL.
>
> > (def myClosure #(prn "Hello"))
>
> > How can I execute the closure in myClosure now?

Hello Mark, maybe something got mixed up here:
#(prn "Hello") looks like an ordinary anonymous function to me,
and not like a closure.
Well, it depends on how we want to define “closure”.
I think the definition should include that it must be a function
(be it a named or anon one) that closes over some lexical
environment. In my opinion this environment should not be the
trivial one: the empty one.
We could do this, but in that case every function would be a
closure. So from that I would say that the given example was
not for a closure.

Maybe a simple accumulator could work here:
user> (let [acc (ref 0)]
        (defn make-accumulator [n]
          (dosync (ref-set acc n))
          (fn [i]
            (dosync (alter acc + i)))))
#'user/make-accumulator

So, here make-accumulator is a closure.
It closes over acc.
And the anon function that is returned by
make-accumulator is also a closure, as it
also closes over acc.
--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to