* Данный текст распознан в автоматическом режиме, поэтому может содержать ошибки
Язык программирования систем Mathematica
{ new`q,new`w,Global` p} { new`q, new`w, p} Context/@{new`q,new`w,Global`p} {new`,new`,Global`}
1089
Обратите внимание на то, что символы new`q и new`w имеют свой новый кон текст new` и отображаются вместе с ним (но контекст указан перед символом). А вот символ Global` p отображается лишь кратким именем, а полностью не ото бражается. Причина этого – в том, что текущий контекст есть Global`, а контекст new отсутствует на так называемой контекстной дорожке – проще говоря, в спис ке контекстов. Что касается символов q, r и z, то сами по себе (без новой контекст ной приставки) они по прежнему имеют контекст Global`:
Context/@{q,p,w} {Global`,Global`,Global`}
Для вывода контекстной дорожки используется переменная $ContextPath:
$ContextPath {Global`,System`}
С помощью функции Prepend можно добавить в контекстную дорожку новый контекст, например new`:
$ContextPath=Prepend[$ContextPath,"new`"] {new`,Global`,System`}
Теперь функция Context возвращает только контексты символов new`q, new`w и Global`r:
Context/@{new`q,new`w,Global`p} {new`,new`,Global`}
С помощью функции Begin можно изменить текущий контекст на заданный, например Global` на new`:
Begin["new`"] new` q=5; { q,Context[q] } {5,new`}
Теперь легко разобраться в том, как интерпретируются символы с разными контекстами. Любой символ, вводимый без контекстной приставки, то есть своим коротким именем, интерпретируется и выводится с этим именем, если его кон текст является текущим. Если символ вводится полным именем, то проверяется, есть ли его контекст на контекстной дорожке. Если он есть, то к символу добав ляется самый левый контекст из имеющихся на контекстной дорожке. Таким об разом, по мере ввода новых контекстов, имена которых совпадают со старыми, происходит вытеснение новыми контекстами старых. Другими словами, это по зволяет обновить уже имеющиеся определения, сохранив их на случай отмены старых контекстов. Этот принципиально важный механизм модификации объектов играет решаю щую роль в создании пакетов расширений. В них часто уже имеющиеся функции