The original question (
http://stackoverflow.com/questions/43897632/mapped-calls-to-clojurescript-macro)
was about automatically generating callback functions for CLJS. Perhaps I
oversimplified it too much for the example.
Alan


On Thu, May 11, 2017 at 1:55 AM, Dragan Djuric <draga...@gmail.com> wrote:

> What's wrong with (foo :able) => "Adelicious!" and (:able foo) =>
> "Adelicious!"?
>
>
> On Thursday, May 11, 2017 at 9:20:19 AM UTC+2, Alan Thompson wrote:
>>
>> A recent question on StackOverflow raised the question of the best way to
>> automatically generate functions. Suppose you want to automate the creation
>> of code like this:
>>
>>
>>
>> (def foo
>>   {:able    "Adelicious!"
>>    :baker   "Barbrallicious!"
>>    :charlie "Charlizable"})
>> (def bar
>>   {:able    "Apple"
>>    :baker   "Berry"
>>    :charlie "Kumquat"})
>>
>> (defn manual-my-foo [item] (get foo item))
>> (defn manual-my-bar [item] (get bar item))
>>
>> (manual-my-foo :able) => "Adelicious!"
>> (manual-my-bar :charlie) => "Kumquat"
>>
>>
>> You could write a macro to generate one of these at a time, but you can't
>> pass a macro to a higher-order function like `map`, so while this would
>> work:
>>
>>
>> (generate-fn :foo)  ;=> creates `my-foo` w/o hand-writing it
>>
>>
>> this wouldn't work:
>>
>>
>> (map generate-fn [:foo :bar :baz])
>>
>> While one could write a 2nd macro to replace `map`, this is a symptom of
>> the "Turtles All the Way Down" problem. One workaround is to avoid macros
>> altogether and use only functions to generate the required `my-foo` and
>> `my-bar` functions.  The trick is to make use of the built-in Clojure
>> function `intern`  both to save the newly generated functions into the
>> global environment and to retrieve the pre-existing maps `foo` and `bar`.
>> Full details are available Q&A-style at the StackOverflow post
>> <http://stackoverflow.com/questions/43904628/how-to-create-clojure-defn-functions-automatically/43904717#43904717>
>> .
>>
>> Enjoy,
>> Alan
>>
>> --
> 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/d/optout.
>

-- 
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/d/optout.

Reply via email to