Re: patterns

*To*: mathgroup at smc.vnet.net*Subject*: [mg3738] Re: patterns*From*: rhall2 at umbc.edu (hall robert)*Date*: Sun, 14 Apr 1996 03:00:27 -0400*Organization*: University of Maryland, Baltimore County*Sender*: owner-wri-mathgroup at wolfram.com

In article <4ki9uv$9dm at dragonfly.wolfram.com>, Susan Rempe <rempe at euclid.chem.washington.edu> wrote: > >I have a list of numbers and symbols. >How can I collect all the members of the list >which have a common denominator? > >ex. list={Sin[theta]/r, Cos[theta]/(r*s), 2*Csc[theta]/(2*r)} > > Say I want to collect all members of the list with r in the denominator; > > i.e. answer=Sin[theta]/r; Mathematica automatically evaluates the elements in a list, with this result: In[83]:= list1 = {Sin[theta]/r, Cos[theta]/(r*s), 2*Csc[theta]/(2*r)} Out[83]= Sin[theta] Cos[theta] Csc[theta] {----------, ----------, ----------} r r s r As a result, the following function returns the 1st and 3rd elements, not just the 1st. The function name is "returnMatchingBottoms", which sounds like a method used at a daycare center to make sure the parents of twins get the correct two infants back at the end of the day. Oh well. In[90]:= who's denominators match the pattern called "bottom". The first anonymous function goes to those locations and takes the expressions, placing them in a list of expressions with matching denominators. *) returnMatchingBottoms[expressionList_, bottom_] := Map[ (* Takes expressions from expressionList. *) Function[ {location}, Take[expressionList, location] ], (* Returns a list of locations of successful matches. *) Position[ (* Returns a list of results of comparison of each denominator with bottom. *) Map[ (* Returns "True" if the denominator matches bottom *) Function[ {expression}, Denominator[expression] === bottom ], expressionList ], True ] ] // Flatten; (* Flatten removes some unnecessary curly brackets. *) returnMatchingBottoms[list1, r] Out[92]= Sin[theta] Csc[theta] {----------, ----------} r r For the sake of brevity, you can use the following: returnMatchingBottoms[l_, b_] := Flatten[ Take[l, #]& /@ Position[(Denominator[#] === b)& /@ l, True] ] -- Bob Hall | "Know thyself? Absurd direction! rhall2 at gl.umbc.edu | Bubbles bear no introspection." -Khushhal Khan Khatak ==== [MESSAGE SEPARATOR] ====