Thanks Chouser,
No, I really didn't have any intentions with this example. I was
merely exploring around. In hindsight it is also obvious why this
works.
(defn foo[]
(defn bar [x] (* x 2))
nil)
(foo)
(bar 2) ---> returns 4
I just didn't realize initially what was going on... that defn binds
globally. And yeah, this could be abused to allow some kind of weird
mutability. I was't going for that. :)
What I originally wrote was this.... (with camel case corrected)
(defn create-a [first-name last-name]
(let [fnc-map {'type (fn [] "person")
'get-first-name (fn [] first-name)
'get-last-name (fn [] last-name)
'name-length (fn [] (+ (count first-name) (count last-name)))}]
(fn [fnc-symbol & args]
(apply (fnc-map fnc-symbol) args))))
((create-a "Kurt" "Z") 'get-first-name)
(def bob-vance (create-a "Bob" "Vance"))
(bob-vance 'name-length)
(bob-vance 'get-first-name)
I wasn't completely satisfied with the example because it seemed I
could make it a bit more abstract. Before I went down the path of
writing a macro, I ended up stumbling on some strangeness with defn.
If you are curious as to my intentions, I have been watching the SICP
lecture series. And I was a bit intrigued in alternative ways of
implenting simple "types" in a lisp instead of having a lookup table.
Kurt
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---