a plug for Block, Re: mg[758]

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg823] a plug for Block, Re: mg[758]
• From: Allan Hayes <hay at haystack.demon.co.uk>
• Date: Mon, 24 Apr 1995 02:47:10 -0400

```Block[{a,b=c},expr] blocks off any existing definitions for a and
b; defines b = c; evaluates expr; then removes the definition b = c
and unblocks any previous definitions for a and b.

Here is a use for this sort of behaviour:

In mg[758] David Wagner creates

In[1]:=
factorization =
(IntegerPower[2, 2] IntegerPower[3, 2] IntegerPower[5, 3]
IntegerPower[53, 1])

Which, with his formatting for IntegerPower, prints as
Out[1]=
2  2  3   1
2  3  5  53

Then, to evaluate this form to 238500, he defines

In[2]:=
ExpandInteger[x:(a_IntegerPower * b_.)] :=
x /. IntegerPower->Power
ExpandInteger[x_] := x

In[4]:=
ExpandInteger[factorization]
Out[4]=
238500

An alternative to ExpandInteger, which is also faster, is

In[5]:=
ExpandInteger2[expr_]:= Block[{IntegerPower = Power},expr]

This evaluates expr with IntegerPower temporarily set to Power
(which is what we want).

Here are the timings

In[6]:=
Do[ExpandInteger2[factorization],{1000}]//Timing
Out[6]=
{1.88333 Second, Null}
In[7]:=
Do[ExpandInteger[factorization],{1000}]//Timing
Out[7]=
{2.83333 Second, Null}

ExpandInteger2 also gets inside expressions, which ExpandInteger
does not do:
In[8]:=
ExpandInteger[{factorization}]
Out[8]=
2  2  3   1
{2  3  5  53 }
In[9]:=
ExpandInteger2[{factorization}]
Out[9]=
{238500}

Allan Hayes
hay at haystack.demon.co.uk

```

• Prev by Date: Re: Rule Writing for x and 1/x
• Next by Date: Re: Linearization of a system of differential equations
• Previous by thread: PowerExpand/InverseTrig snafu
• Next by thread: Re: Linearization of a system of differential equations