2010-11-22 4 views
7

式を受け取り、パターンxと一致するすべてのHeadを評価するレシピを見たのは覚えていますが、一致しないヘッドが評価されていない部分式は残しておきます。私はもうこのレシピを見つけることができません、誰もこれを行う正しい方法を知っていますか?式で特定のヘッドタイプのみを評価していますか?

答えて

5

これはTed Ersek's Mathematica Tricks under "Clever Little Programs"です。
ポインタのために@TomDに感謝します。

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] 

編集

[]ホールドでも動作するようだが、私は深いテストを実行したことはありません。

+1

これは、Ted ErsekのMathematica Tricksの "Clever Little Programs"で議論されています。 http://www.verbeia.com/mathematica/tips/Tricks.html – tomd

+0

@TomD Updated。たくさんありがとう! –