Re: Q: About constants inside Distribute

*To*: mathgroup at smc.vnet.net*Subject*: [mg9237] Re: [mg9187] Q: About constants inside Distribute*From*: Allan Hayes <hay at haystack.demon.co.uk>*Date*: Fri, 24 Oct 1997 01:00:51 -0400*Sender*: owner-wri-mathgroup at wolfram.com

sergio at scisun.sci.ccny.cuny.edu (Sergio Rojas) [mg9187] Q: About constants inside Distribute asks why we get rule = Dot[s___,(k:(a[i_]))m___, r___]:> k Dot[s,m,r] f = O1*a[1] + O2*a[2] g = P1*a[3]*a[1] h = O2*a[3] Distribute[f.g.h]//.rule 2 a[1] a[3] O1 . P1 . a[3] . O2 + a[1] a[2] a[3] O2 . P1 . a[3]. O2 with the a[3] not stripped out by the rule. The problem is seems to lie in MatchQ[a , a m___] False When we would expect matches like a ~ a 1 ~ a Times[] ~ a Times[___]. I'm not clear about what is happening here but a work-around is use default values MatchQ[a,a m_.] (* note the dot m_. *) True and modify the rule to rule2 = Dot[s___,(k:a[i_])m_., r___]:> k Dot[s,m,r] Check: Distribute[f.g.h]//.rule2 a[1]^2*a[3]^2*O1 . P1 . O2 + a[1]*a[2]*a[3]^2*O2 . P1 . O2 Allan Hayes hay at haystack.demon.co.uk http://www.haystack.demon.co.uk/training.html voice:+44 (0)116 2714198 fax: +44 (0)116 2718642 Leicester, UK