Re: Quick Mathematica Question

• To: mathgroup at smc.vnet.net
• Subject: [mg115279] Re: Quick Mathematica Question
• From: Charles Gillingham <cgillingham1 at me.com>
• Date: Thu, 6 Jan 2011 02:04:56 -0500 (EST)

```Try this:

------------------------

(* Given a list of expressions return all possible applications of the \
grammar rules to the expressions *)

ApplyGrammar[ grammar_List, expressions_List ] :=
Join @@ Map[ReplaceList[#, grammar] &, expressions]

MyGrammar = {
{a___, 0, b___} -> {a, 1, b},
{a___, 1, b___} -> {a, 1, 0, b}
};

------------------------
Note that the grammar rules have to be written a little strangely to get the pattern matcher to insert them in the sequence.

You can apply the function by hand, like so:

{{0}, {1}} // TableForm
ApplyGrammar[MyGrammar, %]  // TableForm
ApplyGrammar[MyGrammar, %]  // TableForm
ApplyGrammar[MyGrammar, %]  // TableForm
ApplyGrammar[MyGrammar, %]  // TableForm
ApplyGrammar[MyGrammar, %]  // TableForm

Or you can apply it using "Nest" or "Nestlist", like so:

Nest[ApplyGrammar[MyGrammar, #] &, {{0}, {1}}, 4] // TableForm

or similarly with "NestList".

On Jan 5, 2011, at 2:46 AM, Dean wrote:

> How would I program user-defined rules such as
>
> 0->1
> 1->10
>
> to give the output, and specify the number of recursions.  For example,
> starting with 0,
>
> 0
> 1
> 10
> 101
> 10110
> ...
>
> Specified, 5 generations.
>
> --
> Dean Rosenthal
>
> cell: 646 733 6966
> www.deanrosenthal.org
> http://www.the-open-space.org/webmag/test1.html

```

• Prev by Date: Re: Quick Mathematica Question
• Next by Date: Re: original meaning of System` functions
• Previous by thread: Re: Quick Mathematica Question
• Next by thread: Solving 2nd order PDE into Mathematica