Spec-Zone.ru › Elisp

Доступ к элементам списков

Функция: 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API