Сохранение определенных моделей без оценки - PullRequest
4 голосов
/ 23 ноября 2010

Мне часто нужно отлаживать, не давая определенному определению оценить и проверить промежуточные результаты. Я делаю это, делая initAll;clearAll[f,g,h]. Мне это не нравится, потому что

  1. Это заставляет вас помещать все в один блок инициализации
  2. Он недостаточно гибок, чтобы сохранять только определенные шаблоны, такие как f[1], без оценки

Вместо этого я хотел бы иметь список forbidden шаблонов и иметь любой шаблон, который соответствует оставленным без оценки. Как мне этого добиться?

Редактировать До сих пор я нашел этот шаблон наиболее полезным (это ответ Майкла Пилата, за исключением HoldForm и BlankNullSequence)

eh[expr_, symbols : {___Symbol}] := Block[symbols, HoldForm@Evaluate[expr]]

1 Ответ

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

Block может помочь с тем, что вы хотите:

f[x_] := x + 1;
g[x_] := x - 1;

In[13]:= Block[{f},
 Hold@Evaluate[(f[g[a]]^2)]
 ]

Out[13]= Hold[f[-1 + a]^2]

Хотите ли вы предотвратить оценку для определенных моделей снижения стоимости f?(Например, блок f[x_], но разрешить f[x_, y_])?

ОБНОВЛЕНИЕ

Вот функциональная форма:

SetAttributes[EvaluateHeld, HoldAll];
EvaluateHeld[expr_, symbols : {__Symbol}] :=
  Block[symbols, Hold@Evaluate[expr]
]

In[7]:= EvaluateHeld[f[g[a]]^2, {f}]

Out[7]= Hold[f[-1 + a]^2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...