Previous: 关联列表, Up: 列表


5.9 管理固定大小的对象环

这节描述操作环的函数。一个指的是固定长度的数据结构,它支持插入、删除、旋转、基于模的索引以及遍历。

— Function: make-ring size

此函数创建一个能持有size个对象的新环。 size应当是一个整数。

— Function: ring-p object

如果object是一个环,此函数返回t,否则返回nil

— Function: ring-size ring

此函数返回ring的最大容量。

— Function: ring-length ring

此函数返回ring当前包含的对象个数。它永远不会超出ring-size的返回值。

— Function: ring-elements ring

此函数返回ring中对象的一个列表,按照最新优先的顺序。

— Function: ring-copy ring

此函数返回一个是ring拷贝的新环。它含有与ring相同(eq)的对象。

— Function: ring-empty-p ring

如果ring为空,则返回t,否则返回nil

环中最新的元素总是具有索引0。较高索引对应较旧元素。索引对环大小求模。索引−1对应于 最旧的元素,索引−2对应于次旧的,依次类推。

— Function: ring-ref ring index

此函数返回ring中索引index处的对象。index可以是否值或大于环长度的值。如果 ring是空的,ring-ref产生一个错误。

— Function: ring-insert ring object

此函数将object插入至ring,使它成为最新的元素,并返回object

如果环已满,插入将移除最旧的元素给新元素腾空间。

— Function: ring-remove ring &optional index

此函数从ring中移除对象,并返回该对象。参数index指明要被移除的元素;如果它是nil, 这意味着移除旧最的元素。如果ring是空的,ring-remove产生一个错误。

— Function: ring-insert-at-beginning ring object

此函数将object插入至ring中,将其做为最旧的元素。返回值并不重要。

如果环是空的,此函数移除最新的元素以及给待插入的元素腾空间。

如果你小心的不要越过环的大小,你可以将环当做先进先出队列。例如:

     (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")