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.