MathGroup Archive 1996

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

Search the Archive

Re: Not[OddQ] is not the same as EvenQ (sometimes)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg3898] Re: Not[OddQ] is not the same as EvenQ (sometimes)
  • From: Robert Knapp <rknapp>
  • Date: Sat, 4 May 1996 23:24:03 -0400
  • Organization: Wolfram Research, Inc.
  • Sender: owner-wri-mathgroup at wolfram.com

Arnold Seiken wrote:
> 
> Dear Mathematica experts,
> 
> Position[{2,3,4,5,6,7}, x_?(EvenQ[#]&)]
> {{1}, {3}, {5}}
> Position[{2,3,4,5,6,7}, x_?(!OddQ[#]&)]
> {{0}, {1}, {3}, {5}}
> Therefore, for this example, the pattern x_?(EvenQ[#]&) is not equivalent to
> the pattern x_?(!OddQ[#]&). The latter matches with the head List of {2,3,4,5,6,7}, the former does not. But
> Position[{-2,3,4,-5,6,7}, x_?(NonNegative[#]&)]
> {{2}, {3}, {5}, {6}}
> Position[{-2,3,4,-5,6,7}, x_?(!Negative[#]&)]
> {{2}, {3}, {5}, {6}}
> shows that the Head List is sometimes ignored by Position. Finally
> Position[{1,3,5}, x_?(!OddQ[#]&)]
> {{0}}
> Position[{2,3,4,5,6,7}, x_?(!NumberQ[#]&)]
> {{0}, {}}
> Position[{2,3,4,5,6,7}, x_?(!Positive[#]&)]
> {}
> seems to show that there are really three possible outcomes  when using Not in a pattern involving the Position command. This does not occur for either the Cou
> 
> Count[{1,3,5,7}, x_?(EvenQ[#]&)]
> 0
> Count[{1,3,5,7}, x_?(!OddQ[#]&)]
> 0
> Any explanations?
> 
The explanation is that Position looks at all levels of it argument,
including the head.  Look at the FullForm to the list in question:

In[1]:= expr = {2,3,4,5,6,7};
 
In[2]:= FullForm[expr]
 
Out[2]//FullForm= List[2, 3, 4, 5, 6, 7]

it head is the symbol List.  Furthermore, by convention, the "0th"
element of an expression is its head.  Thus:

In[3]:= expr[[0]]
 
Out[3]= List
 
now the symobol List is neither Odd nor Even, so it does not satisfy
EvenQ, but it does satisfy Not[OddQ[#]]& .  This is why Position is
giving {{0},...} in that case.  


On the other hand, Count does not by default go into the heads.  This
can be changed by an option:

In[4]:= Count[{1,3,5,7},x_?(!OddQ[#]&),Heads->True]
 
Out[4]= 1
 
In[5]:= Count[{1, 3, 5, 7},x_?EvenQ,Heads->True]
 
Out[5]= 0
 

 
Rob Knapp
Wolfram Research, Inc.

http://www.wri.com/~rknapp

==== [MESSAGE SEPARATOR] ====


  • Prev by Date: Re: Bottom line on remote kernel
  • Next by Date: Re: HELP!!! MMA Student version 2.2.4
  • Previous by thread: Not[OddQ] is not the same as EvenQ (sometimes)
  • Next by thread: Re: Not[OddQ] is not the same as EvenQ (sometimes)