[erlang-questions] Erlang PP Question

Richard Carlsson <>
Wed May 30 11:33:42 CEST 2012


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