Services & Resources / Wolfram Forums
MathGroup Archive
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

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

Search the Archive

Re: Call-by-reference from inside a function

  • To: mathgroup at
  • Subject: [mg72574] Re: [mg72568] Call-by-reference from inside a function
  • From: Carl Woll <carlw at>
  • Date: Wed, 10 Jan 2007 02:42:57 -0500 (EST)
  • References: <>

zac wrote:

>Dear Group,
>I'm in need of a function, which is called with one argument, a list.
>The function is to chose one element of the list randomly, AND modify
>the original list by removing the chosen element from it. My problem is
>that I cannot modify the global variable from inside the function. It
>is not a solution to return with a list such as:
>Return[{chosen_element, modified_local_list}], and than make an
>assignment outside the function.
>I'm thinking on some call-by-reference method, but as I've learned so
>far, there is no user-friendly way to do this, just some workarounds
>(which I don't know). Any suggestions?
>example code below:
>RandomChoseElem[list_List] := Module[
>      {pos, elem},
>      pos = Random[Integer, {1, Length[list]}];
>      elem = list[[pos]];
>      (* This is to be solved inside : *)
>      (* global`list = Drop[global`list, {pos}]; *)
>      Return[elem]
>      ];
>set = {1, 2, 3, 4};
Give RandomChoseElem the attribute HoldAll. Here is a modified version 
of your function:


    (*This is to be solved inside:*)

I eliminated the superfluous Return statement, and moved the List 
checking into a condition since the HoldAll attribute will interfere 
with the pattern matching approach. Testing:




Carl Woll
Wolfram Research

  • Prev by Date: ListDimension function
  • Next by Date: Re: Call-by-reference from inside a function
  • Previous by thread: Re: Call-by-reference from inside a function
  • Next by thread: Re: Call-by-reference from inside a function