我记得看到一个表达式来表达并评估每个匹配模式x的头部,同时保留子表达式与非匹配头部的未评估.我再也找不到这个食谱了,有谁知道这样做的正确方法?
这一部分来自Ted Ersek的"聪明的小程序"下的Mathematica技巧.
感谢@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 [],但我从未进行过深度测试.