Символ с позицией — это символ, называемый базовым символом, вместе с неотрицательным целым числом, называемым позицией. Хотя символ с позицией часто ведет себя как его базовый символ, он не является символом: вместо этого это объект, который имеет как базовый символ, так и позицию. Поскольку символы с позицией не являются символами, они не имеют записей в obarray, хотя их базовые символы обычно имеют (см. Создание и интернирование символов).
Байт-компилятор использует символы с позицией, записывая в них позицию каждого вхождения символа, и использует эти позиции в сообщениях об ошибках и предупреждениях. Обычно их не следует использовать иначе. Использование их таким образом может привести к неожиданным результатам с базовыми функциями Emacs, такими как eq и equal.
Печатное представление символа с позицией использует нотацию хеша, изложенную в Печатное представление и синтаксис чтения. Оно выглядит как «#print-symbols-bare к не-nil вокруг операции печати. Байт-компилятор делает это перед записью вывода в скомпилированный файл Lisp.
Когда флаг-переменная symbols-with-pos-enabled не равна nil, символ с позицией обычно ведет себя как его базовый символ.
Например, «(eq (position-symbol 'foo 12345) 'foo)» возвращает t, и equal также рассматривает символ с позицией как его базовый символ.
Когда symbols-with-pos-enabled равна nil, символы с позицией ведут себя как сами по себе, а не как символы. Например, «(eq (position-symbol 'foo 12345) 'foo)» возвращает nil, и equal также рассматривает символ с позицией как не равный своему базовому символу.
В большинстве случаев в Emacs symbols-with-pos-enabled равна nil, но байт-компилятор и нативный компилятор при запуске привязывают ее к t, и в этом случае Emacs работает немного медленнее.
Обычно символы с позицией создаются байт-компилятором путем вызова функции чтения read-positioning-symbols (см. Функции ввода). Их также можно создать с помощью функции position-symbol.
Эта переменная влияет на поведение символов с позицией, когда они не выводятся и не являются аргументами одной из функций, определенных ниже в этом разделе. Когда эта переменная не равна nil, такой символ с позицией ведет себя как его базовый символ; в противном случае он ведет себя как сам по себе, а не как символ.
Когда она привязана к не-nil, принтер Lisp выводит только базовый символ символа с позицией, игнорируя позицию.
В противном случае символ с позицией выводится как сам по себе, а не как символ.
Эта функция возвращает t, если object является символом с позицией, иначе nil.
В отличие от symbolp, эта функция игнорирует symbols-with-pos-enabled.
Эта функция возвращает базовый символ символа с позицией sym или сам sym, если он уже является символом.
Для любого другого типа объекта она сигнализирует об ошибке.
Эта функция игнорирует symbols-with-pos-enabled.
Эта функция возвращает позицию, неотрицательное целое число, из символа с позицией sympos. Для любого другого типа объекта она сигнализирует об ошибке.
Эта функция игнорирует symbols-with-pos-enabled.
Создает новый символ с позицией. Базовый символ нового объекта берется из sym, который является либо символом, либо символом с позицией, базовый символ которого используется. Позиция нового объекта берется из pos, который является либо неотрицательным целым числом, либо символом с позицией, позиция которого используется.
Emacs сигнализирует об ошибке, если один из аргументов неверен.
Эта функция игнорирует symbols-with-pos-enabled.