I'm not sure if this is intended behavior or not, since unquote-
splicing was originally meant for splicing into lists.
But for now anyway, you can use this as a workaround?

(defmacro tm [& args]
  `(hash-map ~@(mapcat (fn [x] (list (keyword x) x)) args)))

Hope that helps
  -Patrick

On Sep 5, 3:49 pm, Andrew Gwozdziewycz <apg...@gmail.com> wrote:
> This seems like a bug to me.
>
> user> `[~@(mapcat #(list (keyword %) (str %)) '(a b c))]
> [:a "a" :b "b" :c "c"]
> user> `(~@(mapcat #(list (keyword %) (str %)) '(a b c)))
> (:a "a" :b "b" :c "c")
> user> `#{~@(mapcat #(list (keyword %) (str %)) '(a b c))}
> #{"a" "b" "c" :a :c :b}
> user> `{~@(mapcat #(list (keyword %) (str %)) '(a b c))}
> ; Evaluation aborted. ArrayIndexOutOfBounds
> user> `{~(keyword "x") ~(str "x")}
> {:x "x"}
> user> `{~@(list (keyword "x") (str "x"))}
> ; Evaluation aborted. ArrayIndexOutOfBounds
>
> unquote seems to work with maps, but unquote-splicing fails even in
> the simplest form with maps.
>
>
>
>
>
> On Sun, Sep 5, 2010 at 2:19 PM, ingokr <ing...@gmail.com> wrote:
> > Hello --
>
> > I am trying to gain a better understanding of Clojure's macro
> > language.
>
> > The output I am aiming for (and which is to be used as code in another
> > macro) is as follows:
>
> > {:a a :b b :c c :d d}
>
> > The attempt I made is as follows:
>
> > (defmacro tm [& args]
> >  `{~@(mapcat (fn [x] (list (keyword x) x)) args)})
>
> > Obviously, I am making a very basic mistake, because at the REPL I
> > get:
>
> > ---
> > user=> (defmacro tm [& args]
> >  `{~@(mapcat (fn [x] (list (keyword x) x)) args)})
> > java.lang.ArrayIndexOutOfBoundsException: 1
> > java.lang.Exception: Unmatched delimiter: )
> > ---
>
> > Any pointers are greatly appreciated.
>
> > Ingolf
>
> > --
> > 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
>
> --http://www.apgwoz.com

-- 
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