Previous: Bool-Vectors, Up: Sequences Arrays Vectors [Contents][Index]
リング(ring)は、挿入、削除、ローテーション、剰余(modulo)でインデックスづけされた参照と走査(traversal)をサポートする、固定長のデータ構造です。ring
パッケージにより、効率的なリングデータ構造が実装されています。このパッケージは、このセクションにリストされた関数を提供します。
killリングやマークリングのような、Emacsにあるいくつかの“リング”は、実際には単なるリストとして実装されていることに注意してください。したがって、これらのリングにたいしては、以下の関数は機能しないでしょう。
この関数は、sizeオブジェクトを保持できる、新しいリングをreturnします。sizeは整数です。
この関数は、objectがリングの場合はt
、それ以外はnil
をreturnします。
この関数は、ringの最大の要素数をreturnします。
この関数は、ringに現在含まれている、オブジェクトの数をreturnします。値は、ring-size
でreturnされる値を超えることはありません。
この関数は、ring内のオブジェクトのリストをreturnします。リストの順序は、新しいオブジェクトが先頭になります。
個の関数は、ringのコピーを新しいリングとしてreturnします。新しいリングは、ringと同じ(eq
な)オブジェクトを含みます。
この関数は、ringが空の場合はt
、それ以外はnil
をreturnします。
リング内の1番新しい要素は、常にインデックス0をもちます。より大きいインデックスは、より古い要素に対応します。インデックスは、リング長のmoduloにより計算されます。インデックス-1は1番古い要素、-2は次に古い要素、...となります。
この関数はインデックスindexにあるring内のオブジェクトをreturnします。indexには負、またはリング長より大きい数を指定できます。ringがからの場合、ring-ref
はエラーをシグナルします。
この関数は、1番新しい要素としてobjectをringに挿入し、objectをreturnします。
リングが一杯の場合、新しい要素のための空きを作るため、挿入により1番古い要素が削除されます。
ringからオブジェクトを削除して、そのオブジェクトをreturnします。引数indexは、どのアイテムを削除するかを指定します。これがnil
の場合、それは1番古いアイテムを削除することを意味します。ringが空の場合、ring-remove
はエラーをシグナルします。
この関数は、1番古い要素として、objectをringに挿入します。return値は、意味をもちません。
リングが一杯の場合、この関数は挿入される要素のための空きを作るために、1番新しい要素を削除します。
リングサイズを超えることを気にしない場合、そのリングをFIFO(first-in-first-out: 先入れ先出し)のキューとして使用することができます。たとえば:
(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")