Это предыдущая редакция документации. Способы создания и чтения списков описаны в актуальном разделе «Процедуры списков и составных значений».
Эта страница представляет собой справочник по встроенным функциям, которые создают списки или работают с ними в Lispex. Эти функции дополняют функции из справочника по основным функциям.
cons
Создает новый список, добавляя элемент в начало существующего списка. "Cons" это сокращение от "construct".
- Синтаксис:
(cons ELEMENT LIST) - Аргументы:
ELEMENT: Новый элемент для добавления в начало.LIST: Существующий список, в который будет добавлен элемент.- Возвращает: Новый список.
- Выбрасывает:
RuntimeError, если второй аргумент не является списком.
Пример:
(cons 1 (list 2 3 4))
;; Результат: (list 1 2 3 4)
(cons (list "a") (list "b" "c"))
;; Результат: (list (list "a") "b" "c")append
Объединяет два списка вместе, создавая один новый, единый список.
- Синтаксис:
(append LIST_1 LIST_2) - Аргументы:
LIST_1: Первый список.LIST_2: Второй список.- Возвращает: Новый список, содержащий все элементы из
LIST_1, за которыми следуют все элементы изLIST_2. - Выбрасывает:
RuntimeError, если любой из аргументов не является списком.
Пример:
(append (list 1 2) (list 3 4))
;; Результат: (list 1 2 3 4)
(append (list) (list 1 2))
;; Результат: (list 1 2)nth
Возвращает элемент по указанному индексу (начиная с нуля) в списке.
- Синтаксис:
(nth LIST INDEX) - Аргументы:
LIST: Список, из которого нужно получить элемент.INDEX: Целочисленный индекс извлекаемого элемента (начиная с 0).- Возвращает: Элемент по указанному индексу.
- Выбрасывает:
RuntimeError, еслиLISTне является списком илиINDEXне является целым числом.RuntimeError, еслиINDEXнаходится за пределами допустимого диапазона (меньше 0 или больше либо равен длине списка).
Пример:
(define my-list (list "a" "b" "c"))
(nth my-list 0)
;; Результат: "a"
(nth my-list 2)
;; Результат: "c"
(nth my-list 3)
;; Выбрасывает RuntimeError: Индекс 3 вне допустимого диапазонаmember
Ищет в списке элемент, равный заданному объекту, и возвращает подсписок, начинающийся с первого совпадения, или #f, если совпадений нет. memv и memq выполняют тот же поиск, используя тождество eqv? вместо глубокого equal? (в этой версии eqv? и eq? совпадают, поэтому memq ведёт себя как memv).
- Синтаксис:
(member OBJ LIST) - Аргументы:
OBJ: Искомый объект (сравнивается черезequal?;memv/memqиспользуютeqv?).LIST: Список для поиска.
- Возвращает: Подсписок (хвост), начинающийся с первого совпавшего элемента, или
#f, если его нет. - Выбрасывает:
RuntimeError, еслиLISTне является правильным списком.
Пример:
(member 2 (list 1 2 3))
;; Результат: (list 2 3)
(member 5 (list 1 2 3))
;; Результат: #fassoc
Ищет в ассоциативном списке (списке пар) первую пару, ключ которой (её car) равен заданному объекту, и возвращает эту пару, или #f, если совпадений нет. assv и assq выполняют тот же поиск, используя eqv? вместо equal?.
- Синтаксис:
(assoc OBJ ALIST) - Аргументы:
OBJ: Искомый ключ (сравнивается черезequal?;assv/assqиспользуютeqv?).ALIST: Ассоциативный список, каждый элемент которого является парой.
- Возвращает: Первую пару-элемент, чей
carсовпадает, или#f, если её нет. - Выбрасывает:
RuntimeError, еслиALISTне является правильным списком пар.
Пример:
(assoc 2 (list (list 1 "one") (list 2 "two")))
;; Результат: (list 2 "two")
(assoc 9 (list (list 1 "one")))
;; Результат: #flist-tail
Возвращает подсписок, полученный отбрасыванием первых K элементов LST, то есть K-й cdr. Результат разделяет структуру с LST, а не копирует её. Если в LST меньше K элементов, это ошибка.
- Синтаксис:
(list-tail LST K) - Аргументы:
LST: Список.K: Неотрицательное целое число, не превышающее длинуLST.
- Возвращает: Подсписок после первых
Kэлементов (самLST, еслиKравно0). - Выбрасывает:
RuntimeError, еслиKотрицательно или больше длиныLST.
Пример:
(list-tail (list 1 2 3 4) 2)
;; Результат: (list 3 4)list-copy
Возвращает поверхностную копию LST, свежую цепочку пар с теми же элементами. Копия не eq? оригиналу, но её элементы разделяются, а не дублируются. Объект, не являющийся списком, возвращается без изменений.
- Синтаксис:
(list-copy LST) - Аргументы:
LST: Список (или любой объект).
- Возвращает: Вновь выделенную копию списка, разделяющую его элементы.
Пример:
(list-copy (list 1 2 3))
;; Результат: (list 1 2 3)