2010-11-22 9 views

Respuesta

5

Este es de Ted Ersek's Mathematica Tricks under "Clever Little Programs".
Gracias a @TomD para el puntero.

EvaluatePattern[expr_,pattn_]:=expr/.Pattern[p, pattn]:>With[{eval=p},eval/;True] 

In[368]:= test = HoldForm[7 (1 + 2 - 2^2) (8 + 8)]; 
      EvaluatePattern[test, _Plus] //InputForm 

Out[369]= HoldForm[7*-1*16] 

Editar

Parece que funciona también con retención [], pero nunca hizo una prueba de profundidad.

+1

Esto se discute en los Trucos de Mathematica de Ted Ersek en "Pequeños programas inteligentes". http://www.verbeia.com/mathematica/tips/Tricks.html – tomd

+0

@TomD Updated.Thanks mucho! –

Cuestiones relacionadas