(a) There's no reason for this to be a macro at all: you don't need to
prevent evaluation of anything, and you don't need to transform any
syntax. Just write a function: (defn asdf [& {:keys [a]}] (println
(comp (partial + 1) a)))
(b) To make this a macro, just be more careful about what you evaluate
at runtime vs compile-time: (defmacro asdf [& {:keys [a]}] `(println
(comp (partial + 1) ~a)))
On Sep 26, 2:14 am, "[email protected]" <[email protected]>
wrote:
> Hi :
>
> I would like to create a macro as follows.
> Note : the prinln function actually is something more sophisticated,
> but I would like to evaluate the composition of one predefined function and
> the other from the input argument.
>
> And I got some errors, why?
> Thanks
>
> user=> (defmacro asdf [& {:keys [a]}]
> `(println ~(comp (partial + 1) a)))
> #'user/asdf
> user=> (asdf :a (partial * 2))
> IllegalArgumentException No matching ctor found for class
> clojure.core$comp$fn__
> 4034 clojure.lang.Reflector.invokeConstructor (Reflector.java:163)
--
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