Re: Re: Sequential evaluation of lists
- To: mathgroup at smc.vnet.net
- Subject: [mg53122] Re: [mg53088] Re: [mg53076] Sequential evaluation of lists
- From: Sseziwa Mukasa <mukasa at jeol.com>
- Date: Fri, 24 Dec 2004 05:59:09 -0500 (EST)
- References: <200412220953.EAA04525@smc.vnet.net> <200412231258.HAA21092@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On Dec 23, 2004, at 7:58 AM, János wrote:
> It would be nice to have all List manipulation functions have an option
> Direction->Left or Direction->Right, just as Limit has +1 or -1. I even
> would like functional programming functions like Map or Apply have this
> option. Any seesaw type operation modeling would greatly benefit from
> it and nature has many.
MapIndexed can be used to map a function whose result depends on the
distance from the first or last position in a list, MapIndexed can
also be used to make a version of Apply that depends on the position in
the list.
>
> On Dec 22, 2004, at 4:53 AM, Ray Koopman wrote:
>
>> When I first started using Mathematica (v2), one of the features that
>> I found rather surprising is its sequential evaluation of lists, as in
>>
>> In[1]:= x = 0; {x++,x++,x++}
>> Out[1]= {0,1,2}
>>
>> I had expected a warning that such code should be avoided because
>> it presumed sequential evaluation, which could not be guaranteed,
>> and a recommendation to treat list elements as being evaluated in
>> parallel -- if not simultaneously then in no particular order.
>> However, so far I have found no exception to sequential evaluation
>> and no mention of it in any documentation. Have I missed something?
>>
++ is not a functional operation by definition since it alters the
value of its argument. It is explicitly a procedural operation and
using it explicitly assumes a known order of evaluation. The
functional equivalent of your statement that assumes no order of
evaluation and thus no knowledge of global state beyond the arguments
to the function is
x=0;#+1&/@{x,x,x}
Of course the existence of a globally accessible x and the ability to
redefine its value through Set also breaks the functional programming
paradigm, but Mathematica has never claimed to be a purely functional
language, only to allow it as one of a variety of styles. At any rate,
given that Mathematica is not dogmatic about functional programming,
and that ++ is explicitly not a functional operation there is no need
for a warning because no rule is being broken. Referring to the help
browser, ++ is described in section 2.5.4 of The Mathematica Book which
is titled "Special Forms of Assignment" which instructs the programmer
that this is not functional programming since assignment of state is
not allowed. Furthermore the first phrase of said section is
"Particularly when you write procedural programs in Mathematica,..."
again informing the user that the assumptions of functional programming
do not apply.
I believe ++ can be implemented in purely functional languages like
Haskell using a construct called a monad but I don't really understand
the details and since Mathematica is not purely functional it's not
necessary to include the monad model anyway.
Regards,
Ssezi
- References:
- Sequential evaluation of lists
- From: "Ray Koopman" <koopman@sfu.ca>
- Re: Sequential evaluation of lists
- From: János <janos.lobb@yale.edu>
- Sequential evaluation of lists