[Date Index]
[Thread Index]
[Author Index]
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**
| |