Доступ к элементам списков
- Функция: car cons-cell
-
Эта функция возвращает значение, на которое ссылается первый слот ячейки cons cons-cell. Другими словами, она возвращает CAR ячейки cons-cell.
В качестве специального случая, если cons-cell является
nil, эта функция возвращаетnil. Поэтому любой список является допустимым аргументом. Ошибка сигнализируется, если аргумент не является ячейкой cons илиnil.(car '(a b c)) ⇒ a(car '()) ⇒ nil
- Функция: cdr cons-cell
-
Эта функция возвращает значение, на которое ссылается второй слот ячейки cons cons-cell. Другими словами, она возвращает CDR ячейки cons-cell.
В качестве специального случая, если cons-cell является
nil, эта функция возвращаетnil; следовательно, любой список является допустимым аргументом. Ошибка сигнализируется, если аргумент не является ячейкой cons илиnil.(cdr '(a b c)) ⇒ (b c)(cdr '()) ⇒ nil
- Функция: car-safe object
-
Эта функция позволяет взять CAR ячейки cons, избегая ошибок для других типов данных. Она возвращает CAR object, если object является ячейкой cons,
nilв противном случае. Это в отличие отcar, которая сигнализирует об ошибке, если object не является списком.(car-safe object) ≡ (let ((x object)) (if (consp x) (car x) nil))
- Функция: cdr-safe object
-
Эта функция позволяет взять CDR ячейки cons, избегая ошибок для других типов данных. Она возвращает CDR object, если object является ячейкой cons,
nilв противном случае. Это в отличие отcdr, которая сигнализирует об ошибке, если object не является списком.(cdr-safe object) ≡ (let ((x object)) (if (consp x) (cdr x) nil))
- Макрос: pop listname
-
Этот макрос предоставляет удобный способ проверить CAR списка и удалить его из списка одновременно. Он работает со списком, хранящимся в listname. Он удаляет первый элемент из списка, сохраняет CDR в listname, а затем возвращает удаленный элемент.
В простейшем случае listname - это нецитируемый символ, обозначающий список; в этом случае этот макрос эквивалентен
(prog1 (car listname) (setq listname (cdr listname))).x ⇒ (a b c) (pop x) ⇒ a x ⇒ (b c)В более общем случае listname может быть обобщенной переменной. В этом случае этот макрос сохраняет в listname с помощью
setf. См. Обобщенные переменные.Для макроса
push, который добавляет элемент в список, см. Переменные списков.
- Функция: nth n list
-
Эта функция возвращает n-й элемент списка list. Элементы нумеруются, начиная с нуля, поэтому CAR списка list является элементом с номером ноль. Если длина списка list меньше или равна n, значение является
nil.(nth 2 '(1 2 3 4)) ⇒ 3(nth 10 '(1 2 3 4)) ⇒ nil (nth n x) ≡ (car (nthcdr n x))Функция
eltпохожа, но применяется к любому виду последовательности. По историческим причинам она принимает аргументы в обратном порядке. См. Функции последовательностей.
- Функция: nthcdr n list
-
Эта функция возвращает n-й CDR списка list. Другими словами, она пропускает первые n ссылок списка list и возвращает то, что следует за ними.
Если n равно нулю,
nthcdrвозвращает весь список list. Если длина списка list меньше или равна n,nthcdrвозвращаетnil.(nthcdr 1 '(1 2 3 4)) ⇒ (2 3 4)(nthcdr 10 '(1 2 3 4)) ⇒ nil(nthcdr 0 '(1 2 3 4)) ⇒ (1 2 3 4)
- Функция: last list &optional n
Эта функция возвращает последнюю ссылку списка list.
carэтой ссылки является последним элементом списка. Если list пуст, возвращаетсяnil. Если n ненулевой, возвращается n-я от последней ссылка, или весь список list, если n больше длины списка.
- Функция: safe-length list
-
Эта функция возвращает длину списка list без риска ошибки или бесконечного цикла. Обычно она возвращает число различных ячеек cons в списке. Однако для циклических списков значение является только верхней границей; оно часто слишком велико.
Если list не
nilили ячейка cons,safe-lengthвозвращает 0.
Самый распространенный способ вычисления длины списка, когда вы не беспокоитесь о том, что он может быть циклическим, это length. См. Функции последовательностей.
- Функция: caar cons-cell
Это то же самое, что
(car (car cons-cell)).
- Функция: cadr cons-cell
Это то же самое, что
(car (cdr cons-cell))или(nth 1 cons-cell).
- Функция: cdar cons-cell
Это то же самое, что
(cdr (car cons-cell)).
- Функция: cddr cons-cell
Это то же самое, что
(cdr (cdr cons-cell))или(nthcdr 2 cons-cell).
В дополнение к вышеперечисленному, определены 24 дополнительных композиции car и cdr как cxxxr и cxxxxr, где каждый x - это либо a или d. cadr, caddr, и cadddr выбирают второй, третий или четвертый элементы списка соответственно. cl-lib предоставляет аналогичные функции под именами cl-second, cl-third, и cl-fourth. См. Функции списков в Расширения Common Lisp.
- Функция: butlast x &optional n
Эта функция возвращает список x с удаленным последним элементом или последними n элементами. Если n больше нуля, она создает копию списка, чтобы не повредить исходный список. В общем случае,
(append (butlast x n) (last x n))вернет список, равный x.
- Функция: nbutlast x &optional n
Это версия
butlast, которая работает, деструктивно изменяяcdrсоответствующего элемента, а не создавая копию списка.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/List-Elements.html