From: Scotty on

To find all 6 letter words where the 1st & last characters are not
equal, the following works & returns a list of 9921 words

l1 = Select[DictionaryLookup[], StringLength[#] == 6 & ]; Length[l1]
l2 = Select[l1, StringTake[#, 1] != StringTake[#, -1] & ]; Length[l2]

10549

9921

What does it take to get this single boolean expression working w
select??? i.e. How can it be done in 1 step??

Select[DictionaryLookup[],
{StringLength[#] == 6} && {StringTake[#, 1] != StringTake[#, -1]} & ]

TIA Scotty

From: Bill Rowe on
On 8/7/10 at 1:30 AM, Scotty(a)yahoo.com (Scotty) wrote:

>To find all 6 letter words where the 1st & last characters are not
>equal, the following works & returns a list of 9921 words

>l1 = Select[DictionaryLookup[], StringLength[#] == 6 & ]; Length[l1]
>l2 = Select[l1, StringTake[#, 1] != StringTake[#, -1] & ];
>Length[l2]

>10549

>9921

>What does it take to get this single boolean expression working w
>select??? i.e. How can it be done in 1 step??

>Select[DictionaryLookup[],
>{StringLength[#] == 6} && {StringTake[#, 1] != StringTake[#, -1]} & =
]

Don't use curly braces to group things. Those are used to define
lists. To group things use parenthesises. That is:

In[2]:= Length@
Select[DictionaryLookup[], (StringLength[#] ==
6) && (StringTake[#, 1] != StringTake[#, -1]) &]

Out[2]= 9921