Re: Optional

• To: mathgroup at smc.vnet.net
• Subject: [mg33712] Re: [mg33689] Optional
• From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
• Date: Mon, 8 Apr 2002 03:04:51 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```I took another look at your original posting and my reply and noticed I
behaviour from the one you experienced. The crucial difference is the
position of the curly brackets {}.

As you correctly pointed out the definition

In[1]:=
f[Optional[index : {_Integer... }, {1}]] := index

In[2]:=
f[]

Out[2]=
f[]

Replacing ... with .. makes no difference here. We can see however that
besides the example that I mistook for yours the following one also
works fine:

In[3]:=
f[Optional[index : _Integer .., 1]] := index

In[4]:=
f[]

Out[4]=
1

So it appears that in general the following construction will not work:

f[Optional[index : F[p..], F[q]]] := something

even when q matches p (eg. q is p)  except when F=Identity.

This indeed seems  odd and although there are rather obvious ways to get
round this I would now tend to think that it may be a bug, particularly
if it indeed used to work in version 3.

On Saturday, April 6, 2002, at 11:05  PM, Andrzej Kozlowski wrote:

> 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
>>
>>
>>
>

```

• Prev by Date: Question - Karmarkar's Algorithm
• Next by Date: combination of two ContourPlots - impossible?
• Previous by thread: Re: Optional
• Next by thread: Re: Optional