Re: Caution with Block vs Module
- To: mathgroup at smc.vnet.net
- Subject: [mg16481] Re: Caution with Block vs Module
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Tue, 16 Mar 1999 03:59:39 -0500
- References: <7cd485$o0s@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Arnold Gregory Civ AFRL/SNAT wrote in message <7cd485$o0s at smc.vnet.net>... >Hello all: > >I just "discovered" a nuance of Block which I did not anticipate so I >thought I would share it with all of you. > >I started using Block as the head of all my functions after reading the >message a few weeks ago on Block vs. Module. I thought I understood the >differences, but the following example took me a long while to track down >:( > >test[eq_]:=Block[{x},x=eq; Return[1]]; > >test[c*x] > >This gives a RecursionLimit. This occurs because only the value of x is >blocked. Therefore test effectively says "x=c*x", which if you try it >directly will also give you a RecursionLimit. Based on this aspect of >Block, I think Module is the most appropriate method (in general) to use for >functions! > >Greg >_________________________________________________________ >D. Gregory Arnold, Ph.D. >Bldg 620 AFRL/SNAT garnold at mbvlab.wpafb.af.mil >2241 AVIONICS CIR Voice: (937) 255-1115 x4388 >WPAFB OH 45433-7321 FAX: (937) 656-4414 >_________________________________________________________ > > Greg, I've teased out a variant of your example a bit below After test[eq_]:=Block[{x},x=eq]; test[c x] evaluates by the steps: Block[{x}, x = c x] , Block[{x}, c^254*Hold[c*x]] (x = c x evaluated causing recursion) c^254*Hold[c*x] (all that Block does is cancel the assignment to x at the end of the Block evaluation) After test2[eq_]:=Module[{x},x=eq]; test2[c*x] evaluates by the steps: Module[{x$},x$= eq] (x renamed by scoping since eq is the target for eq_ ); Module[{x$},x$ = c x] (c x is passed to eqn) Module[{x$n},x$n= c x] (x$ renamed x$n, n is $ModuleNumber) Module[{x$n},c x] ( x$n= c x evaluated) c x We can, improperly, get recursion with test2[c x$] Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565