Оценивать только конкретный тип головы в выражении? - PullRequest
7 голосов
/ 23 ноября 2010

Я помню, как видел рецепт, чтобы взять выражение и оценить каждую Голову, которая соответствует образцу x, оставляя подвыражения с несоответствующими головами без оценки. Я больше не могу найти этот рецепт, кто-нибудь знает правильный способ сделать это?

1 Ответ

5 голосов
/ 23 ноября 2010

Это из Теда Теда Эрсека по 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 [], но я никогда не проводил глубокое тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...