618 Приложение. Обзоры языков
идентификаторов обычно не учитывается регистр задания букв. В определениях
функций языка LISP атомы выполняют обычную роль идентификаторов — они
используются в качестве имен переменных, функций, формальных параметров
ит.д.
Однако во время выполнения атомы языка LISP являются не просто иденти
фикаторами. Любой атом — это сложный объект данных, представленный обла
стью памяти, которая содержит дескриптор типа для атома вместе с указателем на
список свойств. Список свойств содержит различные свойства, ассоциированные
с атомом, одним из которых всегда является его печатное имя — символьная стро
ка, представляющая атом при вводе и выводе. Другие свойства представляют со
бой различные связывания для атома, которые могут включать функцию, с име
нем, соответствующим имени атома, и другие свойства, назначаемые программой
во время выполнения.
Когда бы атом ни появлялся в качестве компонента другого объекта данных,
например списка, он представляется указателем на область памяти, служащим пред
ставлением этого атома во время выполнения. Таким образом, любая ссылка на
атом ABC во время выполнения программы LISP представлена указателем на эту
область памяти.
Каждый атом также обыкновенно появляется как компонент в определяемой
системой центральной таблице, называемой списком объектов (ob_list). Таблица
ob_list обычно организуется как хэштаблица, которая позволяет осуществлять
эффективный поиск печатного имени (символьной строки) и получать значение
указателя на атом с этим печатным именем. Например, когда вводится список и оче
редной элемент является символьной строкой "ABC", представляющей атом ABC,
функция read ищет в таблице ob_list элемент "ABC", который также содержит указа
тель на область памяти, где хранится атом ABC. Этот указатель вставляется в спи
сок, конструируемый в соответствующей точке.
Можно использовать числа (числовые атомы) в целом формате или формате
с плавающей точкой. Используется аппаратное представление, но требуется так
же и дескриптор времени выполнения, так что для каждого числа используется
два слова. Однако это представление хорошо сочетается с представлением, исполь
зуемым для литеральных атомов; число — это атом, обозначенный как принадле
жащий специальному типу, с указателем на битовую строку, представляющую чис
ло, вместо указателя на список свойств.
Строки в языке LISP представляются обычными строками символов. Следует
знать, что одиночная кавычка (') интерпретируется как функция quote для лите
ральных (не вычисляемых) аргументов функции.
Список свойств. Каждый литеральный атом имеет связанный с ним список
свойств, доступ к которому осуществляется через указатель, хранимый в области
памяти, представляющей атом. Список свойств является обычным списком языка
LISP, отличающийся только тем, что его элементы располагаются в чередующей
ся последовательности логическими парами èìÿ ñâîéñòâà/çíà÷åíèå ñâîéñòâà. Если
атом является именем функции, его список свойств содержит имя свойства, даю
щее тип функции, и указатель на список, представляющий собой определение функ
ции. Программист может добавлять другие требуемые свойства, некоторые эле
ментарные операции также могут добавлять свойства.