Re: Word permutations - frustrated by lists.
- To: mathgroup at smc.vnet.net
- Subject: [mg71702] Re: Word permutations - frustrated by lists.
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 27 Nov 2006 04:04:10 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <ekbrks$jga$1@smc.vnet.net>
wooks wrote:
> Hello. Am relatively new with Mathematica.
>
> I seem to have a general problem with results that look right but for
> embedded lists. Here is an example of my problem. This is supposed to
> be a algorithm to generate all permutations of a string. T
>
> Clear[arrangements]
> arrangements[str_String /; StringLength[str] == 1] := {str};
> arrangements[str_String] := (Prepend[arrangements[StringJoin[
> Rest[#]]]], First[#]) & /@
> NestList[RotateRight, Characters[str], StringLength[str] - 1];
> arrangements["dear"]
>
> PS This is not homework. I'm rewriting some examples from another
> programming book as as practice for Mathematica.
>
Hi,
I am not sure which one is going to fit your needs (I admit I am a
little bit confuse by your code and what I think you try to achieve.)
Both are recursive functions, although the result given by the second
function might not be what you had in mind.
In[1]:=
Clear[arrangements];
arrangements[str_String /; StringLength[str] == 1] := {str};
arrangements[str_String] := StringJoin /@ NestList[RotateRight,
Characters[str], StringLength[str] - 1];
arrangements["dear"]
Out[4]=
{dear,rdea,arde,eard}
In[5]:=
Clear[arrangements];
arrangements[str_String /; StringLength[str] == 1] := {str};
arrangements[str_String] := (Prepend[arrangements[StringJoin[Rest[#1]]],
First[#1]] & ) /@ NestList[RotateRight, Characters[str],
StringLength[str] - 1];
arrangements["dear"]
Out[8]=
{{d,{e,{a,r},{r,a}},{r,{e,a},{a,e}},{a,{
r,e},{e,r}}},{r,{d,{e,a},{a,e}},{a,{d,e},{e,d}},{e,{a,d},{d,a}}},{
a,{r,{d,e},{e,d}},{e,{r,d},{d,r}},{d,{
e,r},{r,e}}},{e,{a,{r,d},{d,r}},{d,{a,r},{r,a}},{r,{d,a},{a,d}}}}
HTH,
Jean-Marc