I haven't got Mathematica 3.0 installed anymore but if what you say is
true the behaviour of 4.1 seems more reasonable to me. Observe that:
In[1]:=
Clear[f]
In[2]:=
f[Optional[index : {_Integer }.., {1}]] := index
In[3]:=
f[]
Out[3]=
{1}
On the other hand
In[4]:=
Clear[f]
In[5]:=
f[Optional[index : {_Integer }..., {1}]] := index
In[6]:=
f[]
Out[6]=
Sequence[]
This seems perfectly logical to me. In the first case we use .. which
means one repetition or more. Since the empty collection of arguments
does not match this the default is used. On the other hand, in the
second case we use ..., which means zero repetitions or more. No
arguments matches zero repetitions so you get Sequence[] as the output.
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
On Saturday, April 6, 2002, at 02:49 PM, Ben Langton wrote:
> Hi all,
>
> I am having a problem with the Optional function which I have reduced
> to the
> following snippet of code :
>
> f // Clear;
> f[Optional[index : {_Integer ...}, {1}]] := index;
> f[]
>
> My understanding of the Optional command is that the function f should
> accept a list of zero or more integers as its argument or, if that is
> missing, use the default value of {1}.
>
> Under version 3, f[] (f with no arguments) returns {1}, as I would
> expect,
> yet under version 4.1 it returns the function evaluated.
>
> Can anyone shed any light on why this code acts differently under the
> two
> different versions? What can I do to make it work as expected under
> version
> 4.1?
>
> Many thanks,
>
> Ben Langton
>
>
>