Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

Re: execution model: Function vs. delayed execution

  • To: mathgroup at smc.vnet.net
  • Subject: [mg121336] Re: execution model: Function vs. delayed execution
  • From: David Bailey <dave at removedbailey.co.uk>
  • Date: Sun, 11 Sep 2011 07:28:55 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <j4fhvn$2gr$1@smc.vnet.net>

On 10/09/2011 12:34, Alan wrote:
> Warning: I am a Mathematica newbie and not a CS type, so my vocabulary may prove clumsy.
>
> I am used to a deferred execution model of function definition.  Roughly, if I can write code that would be successfully executed outside a function definition, then I can make it a function body by appropriately "wrapping" it.
>
> In Mathematica, I can evaluate the following):
> x = {1,1,2}
> x=DeleteDuplicates[x]; x
> (Note: the redundancy is intentional.)
>
> Next, I attempt to "wrap" this as follows
> Clear[x]
> Function[x, (x=DeleteDuplicates[x];x)][{1,1,2}]
>
> This produces an error:
> Set::shape: "Lists {1,1,2} and {1,2} are not the same shape."
>
> Can you help me understand the execution model that leads to this?
>
> Thanks,
> Alan Isaac
>
>
The problem is that in your original version x is a global variable, 
whereas in the second, it is the formal argument to your function - so 
you end up executing:

{1,1,2}=DeleteDuplicates[{1,1,2}]

The difference as compared with other computer languages that you may 
have used - e.g. C or Fortran - is that there x would be the name of a 
variable that holds the argument, rather than the argument itself - as 
it is in Mathematica.

The ultimate reason for this difference, is that Mathematica is designed 
to solve both symbolic and numerical problems. So for example, you might 
want to write a function that takes a variable as argument that has no 
value. This would result in an operation on an undefined variable in C 
or Fortran.

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





  • Prev by Date: Re: help to make code run faster (mathematica v8.01)
  • Next by Date: Re: execution model: Function vs. delayed execution
  • Previous by thread: Re: execution model: Function vs. delayed execution
  • Next by thread: Re: execution model: Function vs. delayed execution