Это (очень близко к) таблица символов в смысле Lisp (обратите внимание, что фраза «таблица символов» также может обозначать связанные, но разные структуры данных). Таблица символов представляет собой связь между ключами, называемыми символами, и значениями, называемыми связываниями (или слотами, или каким-либо другим термином).
Операция регистрации нового ключа называется gensym
. Символы Лиспа всегда имеют уникальное имя, которое является строкой; gensym
возвращает имя, которое не используется ни одним символом. Lisp также поддерживает поиск символа по имени: intern
возвращает символ по имени и создает символ, если его нет; некоторые реализации предоставляют intern-soft
, чтобы избежать создания символа, если его нет с таким именем. По заданному символу вы можете получить соответствующее значение с помощью symbol-value
.
Если вы не знаете Лисп, думайте о символах как о переменных; gensym
создает новую переменную, а symbol-value
возвращает значение переменной, обозначенной ссылкой. Эти операции особенно полезны при написании макросов (метапрограммирование), которые Lisp поддерживает очень хорошо. В современных реализациях Lisp есть «неинтернизированные» символы, то есть символы, которых нет ни в одной таблице, что делает вещи чище. Это не имеет значения для структуры данных, которую вы имеете в виду (непостоянные символы - это вещи, которых нет в вашей структуре данных).
Таблица символов легко реализуется поверх интерфейса карты (словаря) (который обычно реализуется с помощью хеш-таблицы или сбалансированного дерева). Gensym - найти свежий ключ, создать его и вернуть. Поиск - это обычный поиск по карте. Если все ваши ключи созданы gensym, тип ключа может оставаться абстрактным.