Иллюстрированный самоучитель по Mathematica 3/4

Понятие о контекстах. Работа с контекстами.

Обратите внимание на то, что символы new' q и new' w имеют новый контекст new' и отображаются вместе с ним (но контекст указан перед символом). А вот символ Global ~ r отображается лишь своим кратким именем. Причина этого в том, что текущий контекст есть Global', а контекст new' отсутствует в списке контекстов (context path). Что касается символов q, r и z, то сами по себе (без новой контекстной приставки) они по-прежнему имеют контекст "Global":

Context/@{q,r,w}
{Global', Global', Global' }

Для вывода списка контекстов используется переменная $ContextPath:

$ContextPath
{Graphics' Animation', Global', System' }

С помощью функции Prepend можно добавить в список новый контекст, например new":

$ContextPath=Prepend[$ContextPath,"new"]
{new', Graphics' Animation', Global', System'}

Теперь функция Context возвращает только контексты символов new'q, new'w и Global' r:

Context/@{new'q,new'w,Global'r}
{new', new', Global'}

С помощью функции Begin можно изменить текущий контекст на заданный, например Global' на new':

Begin["new''"]
new`q=5;
{q,Context[q]} {5, new`}

Теперь легко разобраться, как интерпретируются символы с разными контекстами. Любой символ, вводимый без контекстной приставки, то есть своим коротким именем, интерпретируется и выводится с этим именем, если его контекст является текущим. Если символ вводится полным именем, то проверяется, есть ли его контекст в списке $ContextPath. Если он есть, то к символу добавляется самый левый контекст из имеющихся в списке. Таким образом, по мере ввода новых контекстов, имена которых совпадают со старыми, происходит вытеснение новыми контекстами старых. Другими словами, это позволяет обновить уже имеющиеся определения, сохранив их на случай отмены старых контекстов.

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

Получение списков определений с контекстами

Для получения списка всех определений с заданным контекстом можно использовать функции Names [ "Context' S" ], где S – шаблон, определяющий интересующие нас имена. Например, для получения всех определений с контекстом System' можно использовать функцию Names ["System' *]. Поскольку этот список довольно большой, ограничимся примером вывода всех определений с контекстом System", начинающихся с буквы U:

Names["System'U*"]
  
{UnAlias, Underflow, Underoverscript, UnderoverscriptBox, UnderoverscriptBoxOptions,
Underscript, UnderscriptBox, UnderscriptBoxOptions, UndocumentedTestFEParserPacket,
UndocumentedTestGetSelectionPacket, Unequal, Unevaluated,
Uninstall, Union, Unique, UnitStep, Unprotect, UnsameQ, Unset,
Up, Update, UpperCaseQ, UpSet, UpSetDelayed, Upvalues, URL, Using)

Функция Names [ ] без параметра выводит полный список всех определений как из ядра, так и из пакетов расширений с указанием их контекстов. Таким образом, данная функция дает самую полную информацию об определениях (функциях, константах и т. д.), которые содержит текущая версия системы Mathematica.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.