Подтвердить что ты не робот

Mathematica: Unevaluated vs Defer vs Hold против HoldForm против HoldAllComplete и т.д. И т.д.

Я сбив с толку всеми встроенными функциями Mathematica, которые якобы препятствуют оценке: Unevaluated, Defer, Hold и более полудюжины формы Hold*. Документация Mathematica просто объясняет каждую функцию отдельно, не объясняя, почему вы выбрали тот или иной. Может ли кто-нибудь предложить последовательное объяснение всех этих функций? Все это кажется мне запутанным беспорядком. Все это может быть связано с макросами Lisp.

Большая часть языка Mathematica удивительно хорошо разработана, но похоже, что Вольфрам действительно нарисовал себя в этом вопросе. Или я мог что-то пропустить.

4b9b3361

Ответ 1

Это довольно сложные конструкции, и трудно дать ясные объяснения; они не так просты, как макросы Lisp (или, если на то пошло, отношения между Lisp QUOTE и EVAL). Тем не менее, есть хорошая, продолжительная дискуссия, доступная в виде заметки из журнала Robby Villegas 1999 "Неоценимые выражения" на веб-сайте Wolfram.

Defer опускается из этого разговора, потому что он новый, как в Mathematica 6.0. Это очень похоже на HoldForm, за исключением того, что когда он выводится в интерфейсе (но не в голом ядре), он удаляется, оставляя выражение, которое может использоваться как входное. Это очень полезно, если вы хотите программно построить выражения, которые пользователь может редактировать и оценивать, скажем, в палитре.