MathGroup Archive 2010

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

Search the Archive

Re: question on passing variable to function by reference

  • To: mathgroup at smc.vnet.net
  • Subject: [mg113653] Re: question on passing variable to function by reference
  • From: Leonid Shifrin <lshifr at gmail.com>
  • Date: Sat, 6 Nov 2010 04:59:55 -0500 (EST)

Hi Sjoerd,

The code I got to illustrate the technique was a bit too large to include in a
post, and besides is much easier to run from a notebook, which I could not
attach here - so I sent it to you in a separate message. I am posting this
message on the group just in case that one did not make it through your
spam filter.

Regards,
Leonid


On Thu, Nov 4, 2010 at 11:57 AM, Sjoerd C. de Vries <
sjoerd.c.devries at gmail.com> wrote:

> Hi Leonid,
>
> Thanks for the your extended responses. Very interesting. I would love to
> learn more about your application of the technique in UI programming.
>
> Cheers -- Sjoerd
>
> Hi Sjoerd,
>
> FWIW, I can confirm that this is indeed pass-by-reference. I find this
> quite
> useful at times.
> Perhaps, the most useful for me was the ability to pass symbols to
> functions
> which then
> define those symbols inside their scope as closures (functions which
> operate
> on internal state of those
> functions outside their scope), so that I can later use them in my original
> larger function to operate
> on the symbols created in a second larger function. This is very useful in
> UI programming with Dynamic, for
> instance - this way you can split the monolithic UI into more managable
> chunks and still
> maintain the dynamic updating of the variables. I will be happy to extract
> some minimal
> example out of my code if you are interested.
>
> Sometimes it also offers algorithmic advantages, if the algorithm is more
> suited for
> in-place modifications. In this thread
>
>
> http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/
> thread/69d53a2ffa5a640e<http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/%0Athread/69d53a2ffa5a640e>
>
> I gave a pass-by-reference based implementation of qsort, which is
> asymptotically better than
> the alternative one using immutable lists.
>
> The massive simultaneous assignments using Part, which are very fast, also
> use pass-by-reference to gain
> the speed which is hard to achieve by other means,and are more
> memory-efficient at the same time.
>
> I am also using pass-by-reference  to dynamically generate data structures
> (structs),  for example
> as described in my post in this recent thread:
>
>
> http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/
> thread/b2ddf61da56b0be9<http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/%0Athread/b2ddf61da56b0be9>
>
> The code there is not exactly transparent, but the idea is simple: if you
> have a structure field name
> say foo, you can take a symbol foo and give it HoldAll attribute. Then,
> expression like
>
> s = With[{var = Unique[]},foo[var]]
>
> or
>
> s = foo[Evaluate[Unique[]]]
>
> can be viewed as the "memory cell", so that you can store some information
> in it. In particular,
> s[[1]]=smth will assign a new value, and s[[1]] will return the currently
> stored value.
>
> I am sure there are other uses for pass-by-reference mechanism, these are
> just some off the top of
> my head, in case if you are interested.
>
> Now, regarding the check for list being a list in the OP situation.There
> will be a problem with such check
> if the passed argument is stored in a variable (so that what is passed is a
> variable rather than literal list),
> and if the check is implemented straightforwardly as _List, due to the
> interplay between pattern-matching
> and evaluation. There was a question on the group on a very similar setting
> about a year ago:
>
>
> http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/
> thread/c062579f93e093a6<http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/%0Athread/c062579f93e093a6>
>
> and I also discussed this topic in my book at
>
> http://www.mathprogramming-intro.org/book/node408.html
>
> where I consider this situation in greater detail.
>
>
> Cheers,
> Leonid
>
>
>
>
> On Tue, Nov 2, 2010 at 1:01 PM, Sjoerd C. de Vries
> <sjoerd.c.devries at gmail.com> wrote:
>
> Actually, I thought you couldn't do a 'pass by reference' in
> Mathematica, but this really looks like the real thing.
>
> You might want to add a test to check that list is really a List, but
> otherwise I don't see a problem.
>
> Cheers -- Sjoerd
>
> On Nov 1, 11:01 am, "Nasser M. Abbasi" <n... at 12000.org> wrote:
> > Suppose I want to pass an array to function to be filled in by some
> value=
>
>
>
>



  • Prev by Date: Re: Fonts, Formats, and examples as learning tools
  • Next by Date: Re: How does one fix a Graphics3D display?
  • Previous by thread: Re: question on passing variable to function by reference
  • Next by thread: NDSolve and hybrid dynamics (Differential Algebraic Equation DAE)