Thanks - that's just what I needed to know :-)

On Tuesday, March 18, 2014 12:40:36 AM UTC+2, tbc++ wrote:
>
> The problem is in the way lisp compilers work. Example:
>
> The public macro gets analyzed first and runs, and emits the code required 
> to call the private macro. Then the compiler analyzes the output of the 
> first macro and discovers that the code now calls a new macro. It analyzes 
> this code and finds a call to a private var and dies. 
>
> Macros are evaluated one at a time outer forms to inner forms. This is 
> pretty much the opposite from normal evaluation that happens from the 
> inside out. 
>
> Timothy
>
>
> On Mon, Mar 17, 2014 at 4:29 PM, Yoav Rubin <yoav...@gmail.com<javascript:>
> > wrote:
>
>> Let's leave aside the recommendations not to do it. I'd like to 
>> understand why I get the exception when I make such a call (from a public 
>> macro to a private macro), and if it is possible, what am I doing wrong 
>> here...
>>
>> On Monday, March 17, 2014 7:40:42 PM UTC+2, tbc++ wrote:
>>
>>> Don't use private vars. Instead move the macro to a sub namespace called 
>>> "internals" or "impl" or something like that and make it public. Prefer 
>>> trusting your users instead of limiting them. 
>>>
>>> my $0.02
>>>
>>> Timothy
>>>
>>>
>>> On Mon, Mar 17, 2014 at 11:33 AM, Yoav Rubin <yoav...@gmail.com> wrote:
>>>
>>>> I'm familiar with that trick, but is it a language feature (and then I 
>>>> can rely on to not being changed in the future)? or is it a hack that 
>>>> based 
>>>> on something that may change in future releases?
>>>>
>>>> Thanks,
>>>>
>>>> Yoav
>>>>
>>>>
>>>> On Monday, March 17, 2014 4:09:23 PM UTC+2, Maik Schünemann wrote:
>>>>
>>>>> Hi, 
>>>>> I guess that maybe the same trick works for calling private functions 
>>>>> from another namespace via getting the var and calling it. 
>>>>> That being said, macros calling macros gets very complex after a short 
>>>>> time, it is better to have helper functions instead of macros. 
>>>>> The functions just accept s-expressions and return s-expressions. I 
>>>>> find myself doing exactly that for nontrivial macros. 
>>>>>
>>>>> Hope that helps, 
>>>>> Maik 
>>>>>
>>>>> On Mon, Mar 17, 2014 at 7:02 AM, 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 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.
>>>>
>>>
>>>
>>>
>>> -- 
>>> “One of the main causes of the fall of the Roman Empire was that–lacking 
>>> zero–they had no way to indicate successful termination of their C 
>>> programs.”
>>> (Robert Firth) 
>>>
>>  -- 
>> 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<javascript:>
>> 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 <javascript:>
>> 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 <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> “One of the main causes of the fall of the Roman Empire was that–lacking 
> zero–they had no way to indicate successful termination of their C 
> programs.”
> (Robert Firth) 
>

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

Reply via email to