Mercurial > emacs
comparison lispref/lists.texi @ 63541:ddec16fed4a2
(Rings): New node.
(Lists): Add to menu.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 17 Jun 2005 13:47:44 +0000 |
parents | beeb90a3315c |
children | ffe64a60452e |
comparison
equal
deleted
inserted
replaced
63540:f69f062368dd | 63541:ddec16fed4a2 |
---|---|
22 * List Elements:: Extracting the pieces of a list. | 22 * List Elements:: Extracting the pieces of a list. |
23 * Building Lists:: Creating list structure. | 23 * Building Lists:: Creating list structure. |
24 * Modifying Lists:: Storing new pieces into an existing list. | 24 * Modifying Lists:: Storing new pieces into an existing list. |
25 * Sets And Lists:: A list can represent a finite mathematical set. | 25 * Sets And Lists:: A list can represent a finite mathematical set. |
26 * Association Lists:: A list can represent a finite relation or mapping. | 26 * Association Lists:: A list can represent a finite relation or mapping. |
27 * Rings:: Managing a fixed-size ring of objects. | |
27 @end menu | 28 @end menu |
28 | 29 |
29 @node Cons Cells | 30 @node Cons Cells |
30 @section Lists and Cons Cells | 31 @section Lists and Cons Cells |
31 @cindex lists and cons cells | 32 @cindex lists and cons cells |
1674 @code{rassq-delete-all} is like @code{assq-delete-all} except that it | 1675 @code{rassq-delete-all} is like @code{assq-delete-all} except that it |
1675 compares the @sc{cdr} of each @var{alist} association instead of the | 1676 compares the @sc{cdr} of each @var{alist} association instead of the |
1676 @sc{car}. | 1677 @sc{car}. |
1677 @end defun | 1678 @end defun |
1678 | 1679 |
1680 @node Rings | |
1681 @section Managing a Fixed-Size Ring of Objects | |
1682 | |
1683 @cindex ring data structure | |
1684 This section describes functions for operating on rings. A | |
1685 @dfn{ring} is a fixed-size data structure that supports insertion, | |
1686 deletion, rotation, and modulo-indexed reference and traversal. | |
1687 | |
1688 @defun make-ring size | |
1689 This returns a new ring capable of holding @var{size} objects. | |
1690 @var{size} should be an integer. | |
1691 @end defun | |
1692 | |
1693 @defun ring-p object | |
1694 This returns @code{t} if @var{object} is a ring. | |
1695 @end defun | |
1696 | |
1697 @defun ring-size ring | |
1698 This returns the maximum capacity of the @var{ring}. | |
1699 @end defun | |
1700 | |
1701 @defun ring-length ring | |
1702 This returns the number of objects that @var{ring} currently contains. | |
1703 The value will never exceed that returned by @code{ring-size}. | |
1704 @end defun | |
1705 | |
1706 @defun ring-elements ring | |
1707 This returns a list of the objects in @var{ring}, in no particular | |
1708 order. | |
1709 @end defun | |
1710 | |
1711 @defun ring-copy ring | |
1712 This returns a new ring which is a copy of @var{ring}. | |
1713 The new ring contains the same objects as @var{ring}. | |
1714 @end defun | |
1715 | |
1716 @defun ring-empty-p ring | |
1717 This returns @code{t} if @var{ring} is empty. | |
1718 @end defun | |
1719 | |
1720 The newest element in the ring always has index 0. Higher indexes | |
1721 correspond to older elements. Index @minus{}1 corresponds to the | |
1722 oldest element, @minus{}2 to the next-oldest, and so forth. | |
1723 | |
1724 @defun ring-ref ring index | |
1725 This returns the object in @var{ring} found at index @var{index}. | |
1726 @var{index} may be negative or greater than the ring length. If | |
1727 @var{ring} is empty, @code{ring-ref} signals an error. | |
1728 @end defun | |
1729 | |
1730 @defun ring-insert ring object | |
1731 This inserts @var{object} into @var{ring}, making it the newest | |
1732 element, and returns @var{object}. | |
1733 | |
1734 If the ring is full, insertion removes the oldest element to | |
1735 make room for the new element. | |
1736 @end defun | |
1737 | |
1738 @defun ring-remove ring &optional index | |
1739 Remove an object from @var{ring}, and return that object. The | |
1740 argument @var{index} specifies which item to remove; if it is | |
1741 @code{nil}, that means to remove the oldest item. If @var{ring} is | |
1742 empty, @code{ring-remove} signals an error. | |
1743 @end defun | |
1744 | |
1745 @defun ring-insert-at-beginning ring object | |
1746 This inserts @var{object} into @var{ring}, treating it as the oldest | |
1747 element, and returns @var{object}. | |
1748 | |
1749 If the ring is full, this function removes the newest element to make | |
1750 room for the inserted element. | |
1751 @end defun | |
1752 | |
1753 @cindex fifo data structure | |
1754 If you are careful not to exceed the ring size, you can | |
1755 use the ring as a first-in-first-out queue. For example: | |
1756 | |
1757 @lisp | |
1758 (let ((fifo (make-ring 5))) | |
1759 (mapc (lambda (obj) (ring-insert fifo obj)) | |
1760 '(0 one "two")) | |
1761 (list (ring-remove fifo) t | |
1762 (ring-remove fifo) t | |
1763 (ring-remove fifo))) | |
1764 @result{} (0 t one t "two") | |
1765 @end lisp | |
1766 | |
1679 @ignore | 1767 @ignore |
1680 arch-tag: 31fb8a4e-4aa8-4a74-a206-aa00451394d4 | 1768 arch-tag: 31fb8a4e-4aa8-4a74-a206-aa00451394d4 |
1681 @end ignore | 1769 @end ignore |