MathGroup Archive 1995

[Date Index] [Thread Index] [Author Index]

Search the Archive

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