Spec-Zone.ru › Elisp

Управление кольцом объектов фиксированного размера

Кольцо — это структура данных фиксированного размера, поддерживающая вставку, удаление, вращение и доступ к элементам по индексу по модулю, а также обход. Эффективная структура данных кольца реализована в пакете ring. Она предоставляет функции, перечисленные в этом разделе.

Обратите внимание, что несколько колец в Emacs, такие как кольцо вырезания и кольцо маркировки, фактически реализованы как простые списки, а не с использованием пакета ring; следовательно, следующие функции не будут работать с ними.

Функция: make-ring размер

Возвращает новое кольцо, способное содержать размер объектов. размер должен быть целым числом.

Функция: ring-p объект

Возвращает t, если объект является кольцом, nil, в противном случае.

Функция: ring-size кольцо

Возвращает максимальную вместимость кольца.

Функция: ring-length кольцо

Возвращает количество объектов, которые кольцо в данный момент содержит. Значение никогда не превысит значение, возвращаемое ring-size.

Функция: ring-elements кольцо

Возвращает список объектов в кольце в порядке, начиная с последнего добавленного.

Функция: ring-copy кольцо

Возвращает новое кольцо, являющееся копией кольца. Новое кольцо содержит те же (eq) объекты, что и кольцо.

Функция: ring-empty-p кольцо

Возвращает t, если кольцо пусто, nil, в противном случае.

Самый последний элемент в кольце всегда имеет индекс 0. Более высокие индексы соответствуют более старым элементам. Индексы вычисляются по модулю длины кольца. Индекс -1 соответствует самому старому элементу, -2 — следующему за ним по старшинству и так далее.

Функция: ring-ref кольцо индекс

Возвращает объект в кольце по индексу индекс. индекс может быть отрицательным или больше длины кольца. Если кольцо пусто, ring-ref сигнализирует об ошибке.

Функция: ring-insert кольцо объект

Вставляет объект в кольцо, делая его последним элементом, и возвращает объект.

Если кольцо заполнено, вставка удаляет самый старый элемент, чтобы освободить место для нового элемента.

Функция: ring-remove кольцо &опционально индекс

Удаляет объект из кольца и возвращает этот объект. Аргумент индекс указывает, какой элемент удалить; если он nil, это означает удаление самого старого элемента. Если кольцо пусто, ring-remove сигнализирует об ошибке.

Функция: ring-insert-at-beginning кольцо объект

Вставляет объект в кольцо, рассматривая его как самый старый элемент. Возвращаемое значение не имеет значения.

Если кольцо заполнено, эта функция удаляет последний элемент, чтобы освободить место для вставляемого элемента.

Функция: ring-resize кольцо размер

Устанавливает размер кольца в размер. Если новый размер меньше, то самые старые элементы в кольце отбрасываются.

Если вы соблюдаете осторожность, чтобы не превысить размер кольца, вы можете использовать кольцо как очередь с очередностью «первым вошел, первым вышел». Например:

(let ((fifo (make-ring 5)))
  (mapc (lambda (obj) (ring-insert fifo obj))
        '(0 one "two"))
  (list (ring-remove fifo) t
        (ring-remove fifo) t
        (ring-remove fifo)))
     ⇒ (0 t one t "two")

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/Rings.html

Spec-Zone.ru

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