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?