Предотвращение вычисления выражений в системе Mathematica

В недавнем SO-вопросе были даны три разных ответа, каждый из которых использовал разные методы предотвращения вычисления выражения Equal [] . Они были

  1. Defer []
  2. Unevaluated []
  3. HoldForm []

Иногда у меня все еще возникают проблемы с выбором между этими вариантами (и, судя по ответам на ранее упомянутый вопрос , выбор не всегда ясен и для других). Может ли кто-нибудь написать четкое описание использования этих трех методов?


Есть еще три обертки. Удерживайте [] , HoldPattern [] , HoldComplete [] , и различные Атрибуты для функций HoldAll , HoldFirst , HoldRest и числовые версии NHold * , которые также можно обсудить, если хотите!

Изменить

] Я только что заметил, что это в основном повторение старого вопроса (который я уже поддержал, просто забыл ...). Принятый ответ связан с этим докладом на конференции разработчиков Mathematica в 1999 году, где не обсуждается Defer , поскольку это «Новое в 6». Defer более тесно связан с интерфейсом, чем другие механизмы управления оценкой. Он используется для создания неоцененного вывода, который будет оцениваться, если он указан в выражении Input . Процитируем Центр документации :

Defer [expr] возвращает объект, который остается неизменным, пока не будет явно предоставляется как Mathematica ввод и оценивается с использованием Shift + Enter, оценка на месте и т. Д.

15
задан Community 23 May 2017 в 12:02
поделиться