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