|
[Date Index]
[Thread Index]
[Author Index]
Re: Calling functions with huge arguments
- To: mathgroup at smc.vnet.net
- Subject: [mg97688] Re: Calling functions with huge arguments
- From: dh <dh at metrohm.com>
- Date: Wed, 18 Mar 2009 04:58:35 -0500 (EST)
- References: <gpns8b$gkh$1@smc.vnet.net>
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:
Clear[fun];
SetAttributes[fun, HoldFirst];
fun[large_, small_] := large = large + small;
a = 1; b = 2;
fun[a, b]
a
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
|