Re: Caution with Block vs Module
- To: mathgroup at smc.vnet.net
 - Subject: [mg16491] Re: Caution with Block vs Module
 - From: sb.nospam at stonetics.com (Stonewall Ballard)
 - Date: Tue, 16 Mar 1999 03:59:44 -0500
 - Organization: Stonetics, Inc.
 - References: <7cd485$o0s@smc.vnet.net>
 - Sender: owner-wri-mathgroup at wolfram.com
 
Greg,
You have to be careful any time you pass unevaluated variables into a
function. I don't think that Block is unique in causing problems with
that. Or even Mathematica. Lisp macros can suffer from this problem as
well.
  - Stoney
In article <7cd485$o0s at smc.vnet.net>, Arnold Gregory Civ AFRL/SNAT
<Gregory.Arnold at sn.wpafb.af.mil> wrote:
> 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
-- 
Stonewall Ballard                    Stonetics, Inc.
sb.nospam at stonetics.com    http://www.stonetics.com/