Символы и пространства имен

Ради справедливости, в контексте поста “Символы и контексты“ забыл сослаться на стаью из раздела вопросы и ответы (для функций) “Символы и пространства имен“, хотя уже раньше ссылался на неё в других двух контекстах, в связи с символами и пространствами имен, соответственно.
В статье, автор, буквально, пишет: “С переходными символами у нас уже есть определенный вид пространств имен, подразумеваемых лексическим (исходным файлом) контекстом. Поэтому я решил пойти дальше и реализовать «именованные» пространства имен символов... если мы рассматриваем переходные символы как находящиеся в их собственных анонимных пространствах имен … Базовые концепции очень просты. На самом деле нужны только две новые функции: «symbols» и «local», а также новое глобальное «pico», содержащее начальное (по умолчанию) пространство имен символов. Дополнительные вспомогательные функции включают «nsp» и «import». Если символы никогда не вызываются, все будет работать как прежде. Вы можете продолжать весело программировать PicoLisp, как и раньше.”
: (symbols 'myNames 'pico)
-> (pico)
myNames: # prompt has changed to current namespace
Доступ к символам в другом пространстве имен. Чтобы получить доступ к символу в другом пространстве имен, мы можем использовать символ тильды, разделяющий пространство имен от символа. Тильда была выбрана, потому что она, возможно, не конфликтует с остальной частью синтаксиса PicoLisp. … может быть несколько глобальных таблиц символов, список которых активен в данный момент. Таким образом, символ может быть либо не интернированным, либо интернированным в одной или нескольких таблицах символов.
Импорт символов. Импортировать символ из другого пространства имен можно с помощью import — простого интерфейса для intern.
myNames: (symbols '(pico)) # back to the default namespace
-> (myNames pico)
(import myNames~Foo myNames~Bar)
-> (Foo "Bar")
: Foo
-> 0
: Bar
-> NIL
: (== 'Foo 'myNames~Foo)
-> T
Для использования пространств имен в библиотеках и приложениях лучшей оказалась следующая стратегия: В библиотеке инициализируйте новое пространство имен как первое в порядке поиска около начала исходного файла, а затем позаботьтесь о локализации каждого символа, который должен быть локальным в этом пакете, до того, как он появится в первый раз.
https://picolisp.com/wiki/?symbolnamespaces
P.S. Для того, чтобы продемонстрировать связь концепций контекста и пространства имен, сформулировал промт для АИ-бота - “Сравнение концепции контекстов в Rye и концепции пространства имен в PicoLisp” и там же “Сравнение структуры слова в Rye и структуры символа в PicoLisp” … Если интересно, то вот ссылка на ответ … “концепции контекста в Rye и пространств имён в PicoLisp … различны, но обе представляют собой механизм управления именами и областью видимости. Давайте сравним их семантически и архитектурно … https://chatgpt.com/c/684c1b25-ea1c-8012-88fc-5abdfa13f934
Subscribe to my newsletter
Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Sergey Shishkin
Sergey Shishkin
Всегда чему-то учусь!