Warning: include(/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/wp-cache-base.php): failed to open stream: No such file or directory in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 65

Warning: include(): Failed opening '/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/wp-cache-base.php' for inclusion (include_path='.:/opt/alt/php55/usr/share/pear:/opt/alt/php55/usr/share/php') in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 65

Warning: include_once(/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/ossdl-cdn.php): failed to open stream: No such file or directory in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 82

Warning: include_once(): Failed opening '/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/ossdl-cdn.php' for inclusion (include_path='.:/opt/alt/php55/usr/share/pear:/opt/alt/php55/usr/share/php') in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 82
Понятие о контекстах | Учебники

Главная > Mathematica 8 > Понятие о контекстах


Понятие о контекстах

Понятие о контекстах
Для разрешения подобных противоречий в системе Mathematica введен особый механизм контекстов. Напомним, что под контекстом подразумевается некоторое разъяснение характера связанных с контекстом объектов. Другими словами, это означает, что с каждым объектом системы Mathematica (например, с переменными или функциями) связан некоторый контекст. Чисто внешне контекст задается в виде Имя_контекста (обратный апостроф в конце имени и есть признак контекста).
Итак, контекст фактически является некоторым признаком объекта. Каждый объект системы Mathematica имеет свой контекст, который записывается перед именем объекта (знак «’» при этом является разделителем). Обычно он не виден, но существует. Объекты с одинаковыми именами могут иметь разные контексты и действовать по-разному — то есть по контексту. Пользователям полезно усвоить такую аналогию: контексты — это как бы разные папки со своими именами, куда могут помещаться одноименные файлы-объекты.
С другой стороны, один и тот же контекст может принадлежать разным объектам. Например, все системные переменные и встроенные функции имеют контекст System’, то есть они относятся к системным объектам, а все символы, вводимые в начале работы с системой, имеют контекст Global (глобальные).
Работа с контекстами
В системе Mathematica есть средства для визуализации контекстов. Прежде всего это функция Context:
Context[Tan]
System’
Context[E]
System’
Context/@Cos,Pi,Abort
{System’, System’ , System’}
Текущее значение контекста определяет системная переменная $Context или функция Context [ ]:
{$Context,Context[]}
{Global’, Global’}
В начале сеанса работы по умолчанию действует контекст Global ~, что означает глобальный статус вводимых символов:
Context/@{q,r,w}
{Global’, Global’, Global’}
Однако контекст может быть заменен на любой нужный пользователю просто указанием его перед соответствующим символом или словом:
{new’q, new’ w,Global’r}
{new’q, new’w, r}
Context/@{new’ q,new’ w,Global’ r}
{new’, new’, Global4}
Обратите внимание на то, что символы new 4 q и new’ w имеют новый контекст new s и отображаются вместе с ним (но контекст указан перед символом). А вот символ Global ~ r отображается лишь своим кратким именем. Причина этого в том, что текущий контекст есть Global 4 , а контекст new 4 отсутствует в списке контекстов (context path). Что касается символов q, r и z, то сами по себе (без новой контекстной приставки) они по-прежнему имеют контекст "Global:
Context/@{q,r,w}
{Global 4 , Global 4 , Global 4 }
Для вывода списка контекстов используется переменная $ContextPath:
$ContextPath
{Graphics 4 Animation 4 , Global 4 , System 4 }
С помощью функции Prepend можно добавить в список новый контекст, например new":
$ContextPath=Prepend[$ContextPath,"new4"]
{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.
Подготовка пакетов расширений системы Mathematica
 

Мощным средством расширения возможностей системы Mathematica является подготовка пакетов расширений. Пакеты расширений позволяют создавать новые процедуры и функции и хранить их на диске в виде файлов с расширением . m. После считывания такого пакета с диска все входящие в него определения функций становятся доступными для использования в соответствии с правилами, принятыми для встроенных функций. Текст пакета расширения не выводится после его вызова, чтобы не загромождать документ вспомогательными описаниями. В сущности, пакеты расширения — это просто наборы программ на языке программирования системы Mathematica, подобранные по определенной тематике.

Статьи по теме

Комментарии запрещены.