我记得看过一个表达式来获取表达式并评估每个与模式x匹配的Head,同时使子表达式与不匹配的头部保持未评估状态。我再也找不到这个食谱了,有没有人知道这样做的正确方法?
答案 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 [],但我从未进行过深度测试。