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

Jack Lee
Dept. of Mathematics
University of Washington
Seattle, WA

```

• Prev by Date: sequential joining of 3D points
• Next by Date: Re: Why printing?
• Previous by thread: Re: sequential joining of 3D points
• Next by thread: Re: Why printing?