MathGroup Archive 2008

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

Search the Archive

Re: pass by reference

  • To: mathgroup at smc.vnet.net
  • Subject: [mg93741] Re: pass by reference
  • From: David Bailey <dave at removedbailey.co.uk>
  • Date: Mon, 24 Nov 2008 04:15:42 -0500 (EST)
  • References: <gg8p9s$jsp$1@smc.vnet.net>

juan flores wrote:
> Dear all,
> 
> How do you pass by reference in Mathematica?
> 
> Let us say we want to program push and pop.
> --------
> Push[el_, stack_] := Prepend[stack, el]
> Pop[stack_] := {First[stack], Rest[stack]}
> 
> stack = {1, 2, 3}; newel = 5;
> 
> stack = Push[newel, stack]
> {5, 1, 2, 3}
> 
> {lastel, stack} = Pop[stack]
> {5, {1, 2, 3}}
> 
> stack
> {1, 2, 3}
> --------
> 
> Code is working, but it is kind of awkward to have to use pure
> functional programming.  I have not been able to find the way to pass
> parameters by reference (or name - i.e. macros).
> 
> Any pointers/ideas will be greatly appreciated.
> 
> Have a good one,
> 
> Juan Flores
> 
First, I would point out that simply coding a function recursively can 
usually remove the need for a push/pop stack.

If you want to write a function that accepts a variable as an argument 
and alters it, this is possible by holding the relevant argument:

In[228]:= SetAttributes[more, HoldFirst]

In[233]:= more[x_] := (++x);

In[234]:= x = 66

Out[234]= 66

In[235]:= more[x]

Out[235]= 67

In[236]:= x

Out[236]= 67

This function could even be applied to more general objects - such as 
myArray[[k]], but with the proviso that the value of k that will be 
used, will be the value at the time of the incrementation (not usually 
an issue, but it is worth being aware of).

David Bailey
http://www.dbaileyconsultancy.co.uk


  • Prev by Date: Re: Re: Coloring Histograms
  • Next by Date: Re: financial chart with volumes
  • Previous by thread: Re: pass by reference
  • Next by thread: Re: Re: Creating a Banner -> Now creating a slide show