The answer is related to your splicing questions.  What gets passed to the 
macro is not the value of the argument, but rather the symbolic expression 
of the argument.  If I didn't use a temporary variable, that symbolic 
expression would get inserted multiple times into the polynomial 
evaluation.  This is not what you want because it means the expression 
could be evaluated multiple times.

>
> Try passing an expression with a side effect and you'll see what I mean:
>
> @horner(begin
>                    printf("hello")
>                    3
>                end, 4,5,6,7)
>

Whoops, I mean println, not printf.  And I mean, try passing it to a 
version of horner that does not use a temporary variable. 

Reply via email to