You don't have the macro generate a call to the private function, you have the macro call the private function directly
replace: (defmacro call-self* [x] `(~x ~x)) (defmacro call-self [x] `(do (println "calling form " ~(str x) " with itself") (call-self ~x))) with: (defn- call-self* [x] `(~x ~x)) (defmacro call-self [x] `(do (println "calling form " ~(str x) " with itself") ~(call-self x))) The function call-self* is still called at compile-time and is called *by the call-self macro*, not the generated client code. Make sense? On Monday, March 17, 2014 10:31:36 AM UTC-7, Yoav Rubin wrote: > > I need to do it, as I need the arguments to remain not evaluated until > they get to that private macro. That private macro does some work on the > arguments before they get evaluated (the arguments themselves are > s-expressions). > > Still, even if it is a private function - how can I call it from a macro > that is called from another namespace? > > On Monday, March 17, 2014 4:19:19 PM UTC+2, James Reeves wrote: >> >> Don't use a private macro: use a function that spits out an s-expression. >> >> - James >> >> >> On 17 March 2014 06:02, Yoav Rubin <yoav...@gmail.com> wrote: >> >>> Hi All, >>> >>> I have a namespace that has two macros as part of its public API, and >>> another macro that act as helpers for the public macro >>> >>> (defmacro helper-mac [arg1 arg2 f] >>> ;; do stuff with f , arg1 and arg2 >>> ) >>> >>> (defmacro m0 [arg1 arg2] >>> (priv-mac arg1 arg2 f1) >>> ) >>> >>> (defmacro m1 [arg1 arg2] ( >>> (priv-mac arg1 arg2 f2) >>> ) >>> >>> f1 and f2 are just two functions. >>> >>> I would like to make the helper macro private (using ^:private), but >>> when I do it and call either m0 or m1 from another namespace, I get an >>> exception saying that helper-mac is private. >>> >>> Is it possible to call from to a macro in another namespace when that >>> macro is calling a private macro in its namespace? >>> >>> Thanks, >>> >>> Yoav >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@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+u...@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+u...@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.