Re: Why printing?
- To: mathgroup at yoda.physics.unc.edu
- Subject: Re: Why printing?
- From: John Lee <lee at math.washington.edu>
- Date: Mon, 5 Apr 93 09:23:48 -0700
Trott Michael <Michael.Trott at physik.tu-ilmenau.de> writes:
> Have a look at the following three examples:
> 1.)
> {a,b}/.{x___,a,y___}:>Print[z;x]
> This prints z!!!
> 2.)
> {a,b}/.{x___,a,y___}:>Print[z;]
> prints Null (O.K.)
> and
> 3.)
> {a,b}/.{x___,a,y___}:>Print[z;xx]
> prints xx (O.K.).
> The second and third behaviour is O.K. but why is z Printed in the first
> example.
The input form
Print[z;]
is represented internally as
Print[ CompoundExpression[z, Null] ]
When CompoundExpression is evaluated, its value is the value of its last
argument, which is Null. This explains the result of Example (2).
The input form x___ on the left-hand side of a function definition means
that the symbol x can represent any number of arguments, including zero.
When x appears on the right-hand side, it is replaced by however many
actual arguments appeared, even if there were zero. In particular, zero
arguments are NOT replaced by the symbol Null. Thus your Example (1),
represented internally as
{a,b} /. {x___, a, y___} :> Print[CompoundExpression[z, x]]]
evaluates to the following:
Print[CompoundExpression[z]]]
This explains your surprising output.
Jack Lee
Dept. of Mathematics
University of Washington
Seattle, WA