MathGroup Archive 2010

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

Search the Archive

How to Explain This Behavior of Simple Procedures?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg109612] How to Explain This Behavior of Simple Procedures?
  • From: James Stein <mathgroup at stein.org>
  • Date: Sat, 8 May 2010 07:06:33 -0400 (EDT)

I think the scanty procedures below show unexpected, perhaps buggy,
behavior.

These two procedures work as expected:
f assigns a value to a variable passed in by g:

*Input:*

ClearAll [f, g];
f [lhs_, rhs_] := lhs = rhs;
g[rhs_] := Module[{localVar},
   f [localVar, rhs];
   Print["g: localVar=", localVar];
   ];
g[44];


*(printed) Output:*

g: localVar= 44


But this method, where f receives the variable differently, fails:


*Input:*

ClearAll [f, g];
f [lhs_List, rhs_] := lhs[[1]] = rhs;
g[rhs_] := Module[{localVar},
   f [{localVar}, rhs];
   Print["g: localVar=", localVar];
   ];
g[44];


*(printed) Output:*

g: localVar=localVar$313085


In addition, there is an error message:

Set::setps :

  (localVar$313085} in the part assignment is not a symbol.

which is curious because:

Head[localVar$313085] returns Symbol.


My motivation here is to allow a procedure to return one or more subsidiary
results in variables provided by the caller.



  • Prev by Date: Re: Easy question, please help to run a function n times
  • Next by Date: Re: Giving several functions the same argument
  • Previous by thread: Re: Variables in Iterator limits?
  • Next by thread: Re: How to Explain This Behavior of Simple Procedures?