[Date Index]
[Thread Index]
[Author Index]
Re: Sum pattern
*To*: mathgroup at smc.vnet.net
*Subject*: [mg128303] Re: Sum pattern
*From*: "Dave Snead" <dsnead6 at charter.net>
*Date*: Sat, 6 Oct 2012 01:47:31 -0400 (EDT)
*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com
*Delivered-to*: l-mathgroup@wolfram.com
*Delivered-to*: mathgroup-newout@smc.vnet.net
*Delivered-to*: mathgroup-newsend@smc.vnet.net
*References*: <20121005064827.40BDA684C@smc.vnet.net>
Thanks everyone,
I've concluded that the shortest way to do this
(in terms of the number of characters I need to type)
which works is:
In[1]:= x = f[a1, s] + f[a2, s] + f[a3, s]
Out[1]= f[a1, s] + f[a2, s] + f[a3, s]
In[3]:= z = x /. (p : Plus[_f, __f]) :> f[First /@ p, s]
Out[3]= f[a1 + a2 + a3, s]
-- Dave Snead
-----Original Message-----
From: Fred Simons
Sent: Thursday, October 04, 2012 11:48 PM
To: mathgroup at smc.vnet.net
Subject: [mg128303] Re: Sum pattern
On Oct 3, 12:12 am, "Dave Snead"<dsne... at charter.net> wrote:
> Hi,
>
> I'm trying to put together a rule whose left hand side is a sum of
> arbitrary
> length whose elements all have the same head f.
>
> For example:
>
> In[4]:= x = f[a1, s] + f[a2, s] + f[a3, s]
>
> Out[4]= f[a1, s] + f[a2, s] + f[a3, s]
>
> In[6]:= y = f[First /@ x, s]
>
> Out[6]= f[a1 + a2 + a3, s]
>
> which is what I want.
>
> However when I turn this into a rule
>
> In[7]:= z = x /. (p : Plus[__f]) -> f[First /@ p, s]
>
> Out[7]= f[f[a1, s], s] + f[f[a2, s], s] + f[f[a3, s], s]
>
> Why isn't z equal to y?
> How can I make this rule work?
>
> Thanks in advance,
> Dave Snead
Your solution is almost correct, but fails since you did not take into
account that both sides of your rule are evaluated before it is applied.
In[1]:= (p:Plus[__f])->f[First/@p,s]
Out[1]= p__f->f[p,s]
Your rule wraps every expression with head f in another f, as you see in
your output.
To prevent the evaluation, use RuleDelayed for keeping the right-hand side
and HoldPattern for the left-hand side:
In[2]:= x=f[a1,s]+f[a2,s]+f[a3,s]
x /. (p:HoldPattern[Plus[__f]]):>f[First/@p,s]
Out[2]= f[a1,s]+f[a2,s]+f[a3,s]
Out[3]= f[a1+a2+a3,s]
Fred Simons
Eindhoven University of Technology
Prev by Date:
**Re: problem with DSolve and spheroidal harmonics**
Next by Date:
**Re: Trouble Loading Packages...**
Previous by thread:
**Re: Sum pattern**
Next by thread:
**Re: Sum pattern**
| |