
Язык программирования ЛИСП / lisp0010
.htmШаг 10. Элементарные конструкторы для работы со списками Этот шаг посвящен знакомству с элементарными конструкторами.
Таблица 1. Элементарные конструкторы Функция Назначение CONS Строит список (точечную пару) из двух аргументов. LIST Возвращает список из значений аргументов. REVERSE Создает "перевернутый" список. OBLIST Создает и возвращает список обьектов, т.е. список активных на текущий момент символов в системе. (LENGTH OBJECT) Возвращает "длину" OBJECT, соответствующую его типу. 1. Функция CONS позволяет построить список (точечную пару) из двух аргументов: первый аргумент - S-выражение, второй аргумент - список. Синтаксис обращения к функции: (CONS S-выражение Список) Селекторы CAR и CDR являются обратными для конструктора CONS. Список, "разбитый" с помощью функций CAR и CDR на голову и хвост, можно восстановить с помощью функции CONS. Например: $ (CONS (CAR (1 2 3)) (CDR (1 2 3))) (1 2 3) Вторым аргументом может быть и и атом, но в таком случае функция возвращает точечную пару. Например: $ (CONS A B) (A . B) По определению функции CONS список, состоящий из одного элемента, формируется так: $ (CONS A NIL) (A) С учетом этого построение списков нетрудно свести к вложенным вызовам функции CONS, причем вторым аргументом последнего вызова является NIL, служащий основой для наращивания списка. Например: $ (CONS A (CONS B (CONS C NIL))) (A B C) В начало таблицы 2. Функция LIST возвращает список из значений аргументов. Количество аргументов произвольно. При этом создается новый список, вложенный на один уровень круглых скобок глубже любого ее аргумента. Например: $ (LIST 1 2 3) (1 2 3) $ (LIST (1 2 3) 4 (5)) ((1 2 3) 4 (5)) В начало таблицы 3. Функция REVERSE позволяет создать "перевернутый" список. Отметим, что исходный список при этом не изменяется! Например: $ (REVERSE (1 2 3)) (3 2 1) В начало таблицы 4. Функция OBLIST создает и возвращает список обьектов, т.е. список активных на текущий момент символов в системе. Символы располагаются в том порядке, в котором они были считаны и (или) сгенерированы: более новые символы располагаются "слева" от более старых. Отметим, что ненужные символы автоматически удаляются сборщиком мусора. Обращение к функции выглядит так: $ (OBLIST) Список объектов используется при появлении нового объекта для выяснения, действительно ли этот объект новый или он уже встречался в программе.
В начало таблицы 5. Функция (LENGTH OBJECT) возвращает "длину" OBJECT, соответствующую его типу. Если OBJECT есть NIL или точечная пара, то функция LENGTH возвращает количество точечных пар высокого уровня (т.е. элементов) в обьекте. Если OBJECT - атом, то функция LENGTH возвращает количество символов в Р-имени OBJECT. Если OBJECT - число, то функция LENGTH возвращает количество слов (слово равно 2-м байтам), требуемых для размещения числового вектора OBJECT. Например: $ (LENGTH (A B C D)) $ (LENGTH MULISP) 4 6 $ (LENGTH NIL) $ (LENGTH -13) 0 3 В начало таблицы
На следующем шаге мы продолжим изучение конструкторов.
Предыдущий шаг Содержание Следующий шаг