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