Re: Basic questions on _Plus and recursion
- To: mathgroup at smc.vnet.net
- Subject: [mg120950] Re: Basic questions on _Plus and recursion
- From: Peter Pein <petsie at dordos.net>
- Date: Thu, 18 Aug 2011 03:23:59 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201108131049.GAA25524@smc.vnet.net> <j28ek0$3el$1@smc.vnet.net>
Hi,
To make things look more like Mathematica and to speed things up I would
recommend a non-recursive version of Heike's pattern matching function
(and I changed "Scalar" to ScalarQ retrning True|False):
g[a___, b_ ? ScalarQ, c___] :=
Block[ {sc = Pick[#, ScalarQ @ #]&[{a, c}]},
(b Times @@ sc) *
(g @@ DeleteCases[{a, c}, Alternatives @@ Union[sc]])
]
You might want to have a look at
http://dl.dropbox.com/u/3030567/Mathematica/factor_scalars.nb
where you'll find a very simple comparison of f and g.
Regards,
Peter
Am 14.08.2011 14:21, schrieb Heike Gramberg:
> For the second part of your question you could do something like
>
> f[a___, b_ /; Scalar[b] == 1, c___] := b f[a, c]
>
> example:
>
> Scalar[a] = 1;
> Scalar[c] = 1;
> f[a, b, c]
>
> output:
>
> a c f[b]
>
> Heike
>
> On 13 Aug 2011, at 12:49, Ethan Dyer wrote:
>
>> Hi. I'm sure these are common issues, but I haven't found them. Here
> are the two, unrelated questions. Thank you for the help.
>>
>> 1) I want to use _Plus for a function with arbitrary arguments. ie I
> want: f[a+b]=f[a]+f[b], f[a+b,c+d] to go to
> f[a,c]+f[a,d]+f[b,c]+f[b,d], ... Is there a standard way to do this?
>>
>> 2)Here I want to pull out scalars from a function. Something like
> this:
>>
>> f[x__] :=(Times@@Select[{x},Scalar[#]==1&])
> (f@@Select[{x},Scalar[#]!=1&])
>>
>> Where i have defined a function Scalar to =1 for some symbols.
>>
>> for instance say I had defined Scalar[a]=1 then f[a,b,c]= a
> f[b,c].
>>
>> The above does not work, as it gives infinite recursion. Is there a
> way to do this properly?
>>
>> Thank you again. Sorry if these are too common.
>>
>> Ethan
>>
>
>
- References:
- Basic questions on _Plus and recursion
- From: Ethan Dyer <ethansdyer@gmail.com>
- Basic questions on _Plus and recursion