Re: Re: negative pattern matching anyone?
- To: mathgroup at smc.vnet.net
- Subject: [mg43941] Re: [mg43933] Re: negative pattern matching anyone?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Tue, 14 Oct 2003 01:07:37 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
On Tuesday, October 14, 2003, at 03:36 AM, Paolo Bientinesi wrote:
> Andrzej Kozlowski wrote:
>>
>> How about this:
>>
>> holdTimes[x_, y_] := If[x y != 0, With[{u = Abs[x], v = Abs[y]},
>> x y HoldForm[u v]/Abs[x y]], 0]
>>
>> Everything you demand seems to work:
>
> Andrzej,
>
> this definition doesn't work for symbolic arguments:
>
> try:
>
> holdTimes[-a, 3]
>
> --
> Paolo
>
> pauldj at cs.utexas.edu paolo.bientinesi at iit.cnr.it
>
>
I forgot that you wanted it to "work" for symbolic arguments. You can
modify it either like this:
holdTimes[x_, y_] := FullSimplify[If[x*y =!= 0,
With[{u = Abs[x], v = Abs[y]}, (x*y*HoldForm[u*v])/
Abs[x*y]], 0]]
which gives the mathematically more sensible result:
holdTimes[-a, b]
(-HoldForm[Abs[a]*Abs[b]])*Sign[a*b]
or, to
holdTimes[x_, y_] :=
FullSimplify[If[x*y =!= 0,
With[{u = Abs[x], v = Abs[y]}, (x*y*HoldForm[u*v])/
Abs[x*y]], 0]] /. {Abs[p_] -> p, Sign[p_] -> 1}
which gives
holdTimes[-a, b]
-HoldForm[a*b]
which I guess is what you wanted (?)
Note however that the presence of FullSimplify makes this relatively
slow so that an approach based on using string matching (which I
suggested in an earlier posting) might perhaps be preferable.
Andrzej