代码之家  ›  专栏  ›  技术社区  ›  Yaroslav Bulatov

只计算表达式中的特定头类型?

  •  7
  • Yaroslav Bulatov  · 技术社区  · 14 年前

    我记得看到过一个方法,可以获取一个表达式并计算与模式x匹配的每个头,而不计算具有不匹配头的子表达式。我再也找不到这个食谱了,有人知道正确的方法吗?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Dr. belisarius    14 年前

    这个是从 Ted Ersek's Mathematica Tricks under "Clever Little Programs" .
    多亏了 @汤姆 对于指针。

    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[],但我从未进行过深入的测试。