MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Optional

  • To: mathgroup at smc.vnet.net
  • Subject: [mg33786] Re: [mg33689] Optional
  • From: Ben Langton <ben at quickmath.com>
  • Date: Tue, 16 Apr 2002 03:50:41 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Andrzej,

Thanks for your reply. It does indeed look as if this is a bug - I've
notified Wolfram support, and they are investigating it.

Regards,

Ben langton


> From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
To: mathgroup at smc.vnet.net
> Date: Mon, 8 Apr 2002 00:11:33 +0900
> To: Ben Langton <ben at quickmath.com>
> Cc: mathgroup at smc.vnet.net
> Subject: [mg33786] Re: [mg33689] Optional
> 
> I took another look at your original posting and my reply and noticed I
> had mis-typed your definition of f, which resulted in rather different
> 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
> 
> leads to
> 
> 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: RE: Problems with creating packages (formatting)
  • Next by Date: RE: Interval arithmetic, of a sort
  • Previous by thread: Re: Optional
  • Next by thread: Symbols using Prolog