Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

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

Search the Archive

Re: Or in a Select question

  • To: mathgroup at smc.vnet.net
  • Subject: [mg67092] Re: Or in a Select question
  • From: dh <dh at metrohm.ch>
  • Date: Fri, 9 Jun 2006 01:07:37 -0400 (EDT)
  • References: <e68q6i$d0p$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Janos,
your logic is o.k. apart from the Or (||) where you need an And (&&).
Daniel

János wrote:
> Hi,
> 
> I have a list
> 
> lst={a,b,c}
> 
> I make another list from it the following way:
> 
> In[2]:=
> pp = Partition[Tuples[lst,
>      2], 2, 1]
> Out[2]=
> {{{a, a}, {a, b}},
>    {{a, b}, {a, c}},
>    {{a, c}, {b, a}},
>    {{b, a}, {b, b}},
>    {{b, b}, {b, c}},
>    {{b, c}, {c, a}},
>    {{c, a}, {c, b}},
>    {{c, b}, {c, c}}}
> 
>  From here I would like to select all the elements whose sublists  
> contain only different elements.  So my "logical" selection was:
> 
> In[54]:=
> Select[pp,
>    #1[[1,1]] =!= #1[[1,2]] ||
>      #1[[2,1]] =!= #1[[2,
>        2]] & ]
> Out[54]=
> {{{a, a}, {a, b}},
>    {{a, b}, {a, c}},
>    {{a, c}, {b, a}},
>    {{b, a}, {b, b}},
>    {{b, b}, {b, c}},
>    {{b, c}, {c, a}},
>    {{c, a}, {c, b}},
>    {{c, b}, {c, c}}}
> 
> Well, that did not do any damage to the list.  After some time I came  
> up with this one:
> 
> In[49]:=
> Complement[pp, Select[pp,
>     Xor[#1[[1,1]] =!=
>        #1[[1,2]],
>       #1[[2,1]] =!= #1[[2,
>         2]]] & ]]
> Out[49]=
> {{{a, b}, {a, c}},
>    {{a, c}, {b, a}},
>    {{b, c}, {c, a}},
>    {{c, a}, {c, b}}}
> 
> That looks OK, but also looks too complicated.  Why my "logical" one  
> does not work here?
> 
> Interestingly if I just use either the left or right side of the Or,  
> that partial select is working.  For example:
> 
> In[65]:=
> Select[pp, #1[[1,1]] =!=
>      #1[[1,2]] & ]
> Out[65]=
> {{{a, b}, {a, c}},
>    {{a, c}, {b, a}},
>    {{b, a}, {b, b}},
>    {{b, c}, {c, a}},
>    {{c, a}, {c, b}},
>    {{c, b}, {c, c}}}
> 
> Now if I try with Cases and conditional pattern matching then the  
> selection for sublists with identical elements works:
> 
> In[98]:=
> Cases[pp, {u_, v_} /;
>     u[[1]] === u[[2]] ||
>      v[[1]] === v[[2]]]
> Out[98]=
> {{{a, a}, {a, b}},
>    {{b, a}, {b, b}},
>    {{b, b}, {b, c}},
>    {{c, b}, {c, c}}}
> 
> If I change here the === to =!=, then I do not get again that I expect:
> 
> In[103]:=
> Cases[pp,
>    (({u_, v_} /; u[[1]]) =!=
>       u[[2]] || v[[1]]) =!=
>     v[[2]]]
>  From In[103]:=
> \!\(\*
>    RowBox[{\(Part::"partd"\),
>      ":", "\<\"Part specification \\!\\(u \[LeftDoubleBracket] 2 \
> \[RightDoubleBracket]\\) is longer than depth of object. \
> \\!\\(\\*ButtonBox[\\\"More\[Ellipsis]\\\", ButtonStyle->\\ 
> \"RefGuideLinkText\
> \\\", ButtonFrame->None, ButtonData:>\\\"General::partd\\\"]\\)\"\>"}]\)
>  From In[103]:=
> \!\(\*
>    RowBox[{\(Part::"partd"\),
>      ":", "\<\"Part specification \\!\\(v \[LeftDoubleBracket] 2 \
> \[RightDoubleBracket]\\) is longer than depth of object. \
> \\!\\(\\*ButtonBox[\\\"More\[Ellipsis]\\\", ButtonStyle->\\ 
> \"RefGuideLinkText\
> \\\", ButtonFrame->None, ButtonData:>\\\"General::partd\\\"]\\)\"\>"}]\)
> Out[103]=
> {}
>  From In[104]:=
> Part::"partd":"Part specification \!\(u \[LeftDoubleBracket] 2 \
> \[RightDoubleBracket]\) is longer than depth of object. \
> \!\(\*ButtonBox[\"More\[Ellipsis]\", ButtonStyle->\"RefGuideLinkText 
> \", \
> ButtonFrame->None, ButtonData:>\"General::partd\"]\)"
>  From In[104]:=
> Part::"partd":"Part specification \!\(v \[LeftDoubleBracket] 2 \
> \[RightDoubleBracket]\) is longer than depth of object. \
> \!\(\*ButtonBox[\"More\[Ellipsis]\", ButtonStyle->\"RefGuideLinkText 
> \", \
> ButtonFrame->None, ButtonData:>\"General::partd\"]\)"
> 
> if I change =!= to only != then I still do not get that I expect:
> 
> In[108]:=
> Cases[pp, {u_, v_} /;
>     u[[1]] != u[[2]] ||
>      v[[1]] != v[[2]]]
> Out[108]=
> {}
> 
> Obviously I am not GETting something here :)
> 
> Thanks ahead,
> 
> János
> P.S.  It is 5.1 on OSX 10.4.6.  I know that Or evaluates in a non- 
> traditional way and looked the Appendix - that is how I ended up with  
> Xor.
> 
> 
> 
> 
> 
> 
> ----------------------------------------------
> Trying to argue with a politician is like lifting up the head of a  
> corpse.
> (S. Lem: His Master Voice)
> 


  • Prev by Date: Re: Or in a Select question
  • Next by Date: Re: Or in a Select question
  • Previous by thread: Re: Or in a Select question
  • Next by thread: Re: Or in a Select question