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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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
---
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 [email protected].
For more options, visit https://groups.google.com/d/optout.