Re: Help: Why no output?
- To: mathgroup at smc.vnet.net
- Subject: [mg34947] Re: [mg34941] Help: Why no output?
- From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
- Date: Sat, 15 Jun 2002 02:27:29 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
The explanation lies in the following behaviour :
In[1]:=
g[x___]:=h[a,x,b]
In[2]:=
g[]
Out[2]=
h[a,b]
In[3]:=
g[1*x]
Out[3]=
h[a,x,b]
This behaviour is analogous to what you would get if you inserted used
Sequence[] as your second argument:
In[4]:=
h[a,Sequence[],b]
Out[4]=
h[a,b]
In[5]:=
h[a,x*Sequence[],b]
Out[5]=
h[a,x,b]
However, it does not seem that Sequence is actually used, since
In[6]:=
SetAttributes[h,SequenceHold]
In[7]:=
g[]
Out[7]=
h[a,b]
In[8]:=
h[a,Sequence[],b]
Out[8]=
h[a,Sequence[],b]
In your case what happens is this. Let's just consider f[{1,2}]. As
there is no second argument the function If turns into
If[Length[{1,2}==1,Length[{1,2}]] (since there was no n, it vanished,
just as if you had Sequence[] as the second argument). But this
evaluates to If[False,Length[{1,2}]]. Since nothing is specified to be
returned from If in case of False, nothing is returned. However, in the
other case you get If[Length[{1,2}]==1,1,Length[{1,2}]] , which of
course evaluates to If[False,1,Length[{1,2}]] which returns
Length[{1,2}] which is 2.
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
On Friday, June 14, 2002, at 03:38 PM, Kezhao Zhang wrote:
> The behavior of the following function is puzzling to me:
>
> In[1]:=f[x_, n___Integer] := If[Length[{n}] == 1, n , Length[x]]
> In[2]:=f[0.5] (* Nothing returned. *)
> In[3]:=f[{1,2}] (* Nothing returned. The length of x should be
> returned *)
> (* However, with the modification to f, everything works as intended
> *)
> In[4]:=f[x_, n___Integer] := If[Length[{n}] == 1, 1*n , Length[x]]
> ^^^^^^
> In[5]:=f[0.5]
> Out[5]:=0
> In[6]:=f[{1,2}]
> Out[6]:=2
>
> Could anyone help me understand why changing n to (1*n) in the If[]
> statement makes such difference? Why doesn't f[] defined in the In[1]
> work?
>
> Thanks for your help.
>
> Kezhao Zhang
>
>
>