2010-11-22 13 views
7

Ich erinnere mich, ein Rezept zu sehen, um einen Ausdruck zu nehmen und jeden Kopf zu bewerten, der Muster x entspricht, während Teilausdrücke mit nicht übereinstimmenden Köpfen unbewertet bleiben. Ich kann dieses Rezept nicht mehr finden, weiß jemand den richtigen Weg?Nur bestimmten Kopftyp im Ausdruck auswerten?

Antwort

5

Dieser ist von Ted Ersek's Mathematica Tricks under "Clever Little Programs".
Dank @ TomD für den Zeiger.

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] 

bearbeiten

Es scheint auch [] mit Hold zu arbeiten, aber ich lief nie einen tiefen Test.

+1

Dies wird in Ted Erseks Mathematica Tricks unter "Clever Little Programs" diskutiert. http://www.beibeia.com/mathematica/tips/Tricks.html – tomd

+0

@ TomD aktualisiert. Vielen Dank! –

Verwandte Themen