Re: How to change the argument of a function?
- To: mathgroup@smc.vnet.net
- Subject: [mg10915] Re: How to change the argument of a function?
- From: sb.nospam@stonesoft.com (Stonewall Ballard)
- Date: Thu, 12 Feb 1998 20:15:57 -0500
- Organization: StoneSoft, Inc.
- References: <199802050558.AAA14348@smc.vnet.net.> <6brkhm$lqs$3@dragonfly.wolfram.com>
In article <6brkhm$lqs$3@dragonfly.wolfram.com>, seanross@worldnet.att.net wrote: > Vilis Nams wrote: > > > > I want to define a function that in the course of doing something, also > > changes the value of its argument, for example: f[x_]:=Module[{}, > > x=2*x; > > x > > ] > > When I run the function, I get the error: "Set::setraw : Cannot assign > > to raw object ...." Can this be done in some way? > > > > -------------------- > > Vilis O. Nams > > Dept of Biology, NSAC > > Box 550, Truro, NS, Canada > > vnams @ nsac.ns.ca > > ------------------- > > > If I have an argument I want to change in the course of a functional > evaluation, I make a "working" copy at the beginning of the function: > > f[x_]:=Module[{y}, > y=x; > > y=2*y; > > y > > ] > > I don't think you can change the value of the actual argument inside a > function, or if you could that it would be a good idea. If you made > global changes inside a local function, it might make for some > interesting bugs that would be very hard to track down. -- > Remove the _nospam_ in the return address to respond. This is a classic programming problem, solved by using "reference" args or "call by name". The example used in most cases is swap[x, y], which swaps the values of the arguments. In Mathematica it can be done like: swap[x_, y_] := Module[{t = x}, x = y; y = t;] SetAttributes[swap, HoldAll] then try: foo = 1 1 bar = 5 5 swap[foo, bar] foo 5 bar 1 - Stoney -- Stonewall Ballard StoneSoft, Inc. sb.nospam@stonesoft.com http://www.stonesoft.com/
- References:
- How to change the argument of a function?
- From: Vilis Nams <vnams@nsac.ns.ca>
- How to change the argument of a function?