仅评估表达式中的特定头部类型?

时间:2010-11-22 22:54:09

标签: wolfram-mathematica

我记得看过一个表达式来获取表达式并评估每个与模式x匹配的Head,同时使子表达式与不匹配的头部保持未评估状态。我再也找不到这个食谱了,有没有人知道这样做的正确方法?

1 个答案:

答案 0 :(得分: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]  

修改

它似乎也适用于Hold [],但我从未进行过深度测试。