Для чего используется знак доллара $ внутри страны? - PullRequest
2 голосов
/ 11 мая 2011

Какой символ $ используется для внутреннего использования?

Я не имею в виду составные формы x$388 или $5 и т. Д., Только сам по себе $.

Мне интересно, если это допустимый объект для использования в нотации, или что я сломаю, если я сделаю.

Ответы [ 2 ]

4 голосов
/ 11 мая 2011

Неразумно иметь пользовательские переменные, оканчивающиеся нечетным числом $ символов (не считая первого символа).x $, y $$$ и $$ - плохие варианты для имен переменных.

Это потому, что добавление нечетного числа $ к идентификатору - это метод, называемый «лексическим переименованием», который ядро ​​Mathematicaиспользуется, чтобы избежать конфликтов в именах переменных, когда функции высшего порядка возвращают функции, которые используют те же имена переменных, что и их родители.Этот метод используется в различных областях видимости, включая Function, Module, With и Rule;Вот пример с функцией:

In[1]:= f = Function[{x, y}, Function[{x}, x+y]]
Out[1]= Function[{x, y}, Function[{x}, x + y]]
In[2]:= f[2,3]
Out[2]= Function[{x$}, x$ + 3]
In[3]:= ?*`x$
Global`x$
Attributes[x$] = {Temporary}

Короче говоря, добавление $ символов является внутренним системным механизмом переименования, и идентификаторы этой формы распознаются Mathematica как «переименованные» версии $ -lessформы, с временным атрибутом.Не рекомендуется использовать переменные этой формы в вашем собственном коде.

Mathematica - это язык переписывания терминов, который может вести себя как функциональный язык с лексической областью, используя внутренние механизмы переписывания, такие как «лексическое переименование».

2 голосов
/ 11 мая 2011

В версии 7 символ System`$

раньше уже создавался в свежем ядре, но, насколько я знаю, не использовался ни для чего. В версии 8 символ $ предварительно не создан:

In[1]:= Context["$"]

During evaluation of In[1]:= Context::notfound: Symbol $ not found. >>

Out[1]= Context["$"]

Я бы согласился с Szabolcs , что код, использующий $ в System контексте, может сломаться в будущих версиях, а также любой другой код, который изменяет системные символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...