MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Apply a rule to an expression only once

  • To: mathgroup at smc.vnet.net
  • Subject: [mg116299] Apply a rule to an expression only once
  • From: Guido Walter Pettinari <coccoinomane at gmail.com>
  • Date: Thu, 10 Feb 2011 05:22:37 -0500 (EST)

Hello group!

Does anybody know how to apply a rule to an expression only once?
In other words, is it possible to tell ReplaceAll to stop after the
first application of a rule?

Simple example:

expr = f a + f b;
rule = f p_ :> f [p];
ReplaceAll [ expr, rule ]

The output, as expected, is:
f [a] + f [b]

However, what I want is something like:

ReplaceAll [ expr, rule, OnlyFirst -> True ]

that gives the output

f [a] + f b.

My simple example can be solved by using ReplacePart, but alas it is
not the kind of solution I am looking for.

Thank you for your consideration!

Best regards,

Guido W. Pettinari

P.S. I found a temporary solution by using a pattern test at the time
of rule definition, i.e.

rule = f p_ /; matchFirst[] :> f [p],

with

matchFirst [] := Module [ { },
  If [ TrueQ@$alreadyMatched, False, $alreadyMatched = True; True]
  ],

but this does not satisfy me since (i) I do not want to alter the rule
definition, and (ii)  I have to update the global variable
$alreadyMatched every time I want to use the trick.



  • Prev by Date: Regarding messages with uninformative subject lines
  • Next by Date: Re: Sorting nested lists with strings
  • Previous by thread: Regarding messages with uninformative subject lines
  • Next by thread: Re: Apply a rule to an expression only once