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: [mg67078] Re: Or in a Select question
  • From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
  • Date: Fri, 9 Jun 2006 01:06:41 -0400 (EDT)
  • Organization: Uni Leipzig
  • References: <e68q6i$d0p$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,

Select[pp,
(And @@ (UnsameQ @@@ #)) & ]

look not soooo complicated and the pattern matcher 
in

Cases[] should try more than one possibility to 
match the

pattern.

Regards

  Jens

"János" <janos.lobb at yale.edu> schrieb im 
Newsbeitrag news:e68q6i$d0p$1 at smc.vnet.net...
| 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: Using a list as a variable
  • 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