MathGroup Archive 2009

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

Search the Archive

Re: Calling functions with huge arguments

  • To: mathgroup at
  • Subject: [mg97688] Re: Calling functions with huge arguments
  • From: dh <dh at>
  • Date: Wed, 18 Mar 2009 04:58:35 -0500 (EST)
  • References: <gpns8b$gkh$>

Hi Fernando,

with the attribute HoldFirst or HoldAll, you can prevent evaluation of 

the argument.If you specify a symbol in the function call, the function 

receives the symbol. Take care, inside the function the symbol is 

evaluated if needed.

Here is an example for pass-by-reference. a is changed afterwards:


SetAttributes[fun, HoldFirst];

fun[large_, small_] := large = large + small;

a = 1; b = 2;

fun[a, b]


hope this helps, Daniel

Fernando Cucchietti wrote:

> Hi all,


> I am working with a VERY large tensor, so much that I would like to  

> keep at most two copies of it in memory at any given time. The  

> algorithm I want to run is convoluted and repetitive, but it looks  

> very compact when written in terms of subroutines and functions that  

> call themselves many times. However, from what I gather, Mathematica  

> effectively creates a copy of the arguments when a function is called.  

> Is this correct?

> If so, I need to find a way to mimic pass-by-reference style as in C  

> or Fortran, or just pass the arguments that are not big and keep my  

> tensors defined globally (which I think makes the code look less  

> nice). Unwrapping the code so that it does not call functions is not  

> an option, because it would be very complex and never-again-usable.

> My main question is then: what are the best ways to do pass-by- 

> reference (if it is better than global naming), or what approaches  

> have you taken to overcome similar problems?


> Thanks in advance,


> Fernando


  • Prev by Date: Re: Calling functions with huge arguments
  • Next by Date: Playing with numerically integrated fields?
  • Previous by thread: Re: Calling functions with huge arguments
  • Next by thread: formatted table output to ascii file