В недавнем SO-вопросе были даны три разных ответа, каждый из которых использовал разные методы предотвращения вычисления выражения Equal []
. Они были
Defer []
Unevaluated []
HoldForm []
Иногда у меня все еще возникают проблемы с выбором между этими вариантами (и, судя по ответам на ранее упомянутый вопрос , выбор не всегда ясен и для других). Может ли кто-нибудь написать четкое описание использования этих трех методов?
Есть еще три обертки.
Удерживайте []
,
HoldPattern []
,
HoldComplete []
,
и различные Атрибуты
для функций
HoldAll
, HoldFirst
, HoldRest
и числовые версии NHold *
, которые также можно обсудить, если хотите!
] Я только что заметил, что это в основном повторение старого вопроса (который я уже поддержал, просто забыл ...). Принятый ответ связан с этим докладом на конференции разработчиков Mathematica в 1999 году, где не обсуждается Defer
, поскольку это «Новое в 6». Defer
более тесно связан с интерфейсом, чем другие механизмы управления оценкой. Он используется для создания неоцененного вывода, который будет оцениваться, если он указан в выражении Input
. Процитируем Центр документации :
Defer [expr] возвращает объект, который остается неизменным, пока не будет явно предоставляется как Mathematica ввод и оценивается с использованием Shift + Enter, оценка на месте и т. Д.