Mathematica: Неоцененный против отсрочки против удержания против HoldForm против HoldAllComplete против и т. Д. И т. Д.

StackOverflow https://stackoverflow.com/questions/1616592

Вопрос

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top