MathGroup Archive 1998

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

Search the Archive

Re: How to change the argument of a function?



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/



  • Prev by Date: Re: Random Order of a Set of Numbers
  • Next by Date: Re: Animation and exportation
  • Prev by thread: Re: How to change the argument of a function?
  • Next by thread: Re: How to change the argument of a function?