[erlang-questions] Erlang PP Question

Richard Carlsson <>
Wed May 30 12:28:25 CEST 2012


On 05/30/2012 12:17 PM, Kannan wrote:
> Also, is there a way to expand a single macro into multiple macros,
> before a final replacement?

If you mean into multiple macro definitions, it is not possible - each 
macro definition is a separate form, and you can't expand one form into 
multiple forms. But multiple uses of macros in the body of another macro 
is not a problem, if that's what you mean:

-define(X, {foo, ?Y, ?Z}).

    /Richard


> On Wed, May 30, 2012 at 3:42 PM, Kannan <
> <mailto:>> wrote:
>
>     My bad, please read the second PP as -define.
>
>
>     On Wed, May 30, 2012 at 3:41 PM, Kannan <
>     <mailto:>> wrote:
>
>         Isn't PP takes place before parsing? Isn't PP is simply a string
>         replacement?
>
>
>
>         On Wed, May 30, 2012 at 3:03 PM, Richard Carlsson
>         < <mailto:>>
>         wrote:
>
>             On 05/30/2012 11:26 AM, Kannan wrote:
>
>                 Hi There,
>
>                 If -define does just string replacement, why it does not
>                 let me do the
>                 following?
>
>                 -define(Z, z() -> io:fwrite("z")).
>                 -define(Y, y() -> io:fwrite("y")).
>                 -define(X, ?Y. ?Z.).
>
>
>             In the last line, you have ?Y. followed by whitespace. This
>             ends the define declaration. Erlang source code is divided
>             into "forms", where each form ends with . followed by
>             whitespace (usually newline, but any whitespace or even a
>             comment can be used). So you have two forms at the end:
>             '-define(X, ?Y.' and '?Z.).' and none of these are
>             syntactically valid. It is not possible to make a single
>             macro expand into two forms.
>
>                /Richard
>
>
>
>




More information about the erlang-questions mailing list