Re: Pattern replacement
- To: mathgroup at smc.vnet.net
- Subject: [mg122991] Re: Pattern replacement
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Sat, 19 Nov 2011 06:48:20 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201111181250.HAA07952@smc.vnet.net>
(data = Table[-1/n + u, {n, 5}])
{-1 + u, -(1/2) + u, -(1/3) + u, -(1/4) + u, -(1/5) + u}
data /. Rational[-1, q_] + x_ -> q*x - 1
{-1 + u, -1 + 2 u, -1 + 3 u, -1 + 4 u, -1 + 5 u}
data /. k_ + x_ -> -x/k - 1
{-1 + u, -1 + 2 u, -1 + 3 u, -1 + 4 u, -1 + 5 u}
data /. k_?(Element[1/#, Integers] &) + x_ -> -x/k - 1
{-1 + u, -1 + 2 u, -1 + 3 u, -1 + 4 u, -1 + 5 u}
Bob Hanlon
On Fri, Nov 18, 2011 at 7:50 AM, Dr. Wolfgang Hintze <weh at snafu.de> wrote:
> My questions are rather elementary.
>
> I wish to replace expressions of the form
>
> -1/2+u by 2u-1
> -1/3+u by 3u-1
>
> and so on.
>
> Trying the replacement
>
> (1) (-1/2+u)/.(-1/q_ + u) -> (q x-1)
>
> does not work, i.e. leaves the original expression unchanged.
>
> Using FullForm[] to reveal the structure gives
>
> (2) FullForm[Rational[-1, 2] + u]
>
> Now the replacement in explicit form works:
>
> (3) (-1/2+u)/.(Rational[-1, 2] + u) -> (q u -1)
> Out: -1+q*u
>
> But this is not a nice way to write it.
>
> My questions are
>
> 1) Are there better ways to implement the replacement?
> 2) How do I "undo" FullForm[], i.e. which command produces -1/2+u from
> Rational[-1,2] + u ?
> (I can do it by ToExpression["Rational[-1,2] + u"] but maybe there
> is another way avoiding going to strings).
>
> Thanks in advance
> Wolfgang
>
- References:
- Pattern replacement
- From: "Dr. Wolfgang Hintze" <weh@snafu.de>
- Pattern replacement