For what it's worth, Giancarlo makes a good (though vague) point when
recommending maps. You rarely (but not never!) want to def something
programmatically: defs are for things you as the programmer want to
give names to and have access to directly in source code. Often, this
sort of "define a bunch of similar named things" task is better
accomplished with one top-level def, holding a map. For example, you
might have

(defmacro string-maker [string-name the-string]
  `(def ~(symbol string-name) ~the-string))

(string-maker "friend" "Peter")
(string-maker "test" "everything")

but simpler in many cases would be

(def strings (into {} (for [[k v] {"friend" "Peter"
                                   "test" "everything"}]
                        [(keyword k) v])))

Of course, if you're just writing literals anyway, you might as well
make them keywords instead of strings to begin with:

(def strings {:friend "Peter"
              :test "everything"})

Then you can look up strings with (:friend strings), which is easier
to understand than a top-level def of "friend" - you don't have to
remember what kind of thing friend is, since it says right here that
it's a string! And the code is obviously simpler as well.

Anyway, all that said, sometimes macros that create defs are good
ideas, so feel free to use them, but most of the time there's a better
approach.

On Jul 14, 7:57 am, Resty Cena <restyc...@gmail.com> wrote:
> That works! Awesome!
>
> On Thu, Jul 14, 2011 at 5:17 AM, Jonathan Fischer Friberg <
>
>
>
>
>
>
>
> odysso...@gmail.com> wrote:
> > I see I misunderstood the question, sorry about that.
>
> > What you want is a macro:
>
> > (defmacro string-maker [string-name the-string]
> >   `(def ~(symbol string-name) ~the-string))
>
> > Jonathan
>
> > On Thu, Jul 14, 2011 at 1:13 PM, Giancarlo Angulo 
> > <igan.l...@gmail.com>wrote:
>
> >> Please look at this:
> >>http://clojure.org/data_structures
> >> see maps.
> >> ================================
> >>                    Giancarlo Angulo
> >> ================================
> >> -----|-^_^X@^_^,=====|+^_^X~_~@-----
> >> ================================
>
> >> On Thu, Jul 14, 2011 at 2:41 PM, Tuba Lambanog 
> >> <tuba.lamba...@gmail.com>wrote:
>
> >>> Hello,
> >>> Total noobie here. I'm trying to create a sort of a string maker
> >>> function. Something like:
>
> >>> (defn string-maker [string-name the-string]
> >>>  (def string-name (str the-string)))
>
> >>> so that I can call the function like so:
>
> >>> (string-maker "friend" "Peter")
>
> >>> which I expect to give me the variable:   friend
> >>> with the value: Peter
>
> >>> But alas, no luck. Can anybody point me in the right direction?
> >>> Thanks!
> >>> tuba
>
> >>> --
> >>> 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 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 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 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

Reply via email to