GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Rings.html ・ emacs-doc.conao3.com

6.8 固定サイズのオブジェクトリングの管理

リングとは、挿入、削除、回転、および剰余インデックスによる参照と走査をサポートする固定サイズのデータ構造です。効率的なリングデータ構造は、ringパッケージによって実装されています。このパッケージでは、本節に挙げる関数が提供されています。

なお、Emacsのキルリングやマークリングといったいくつかのリングは、実際にはringパッケージを使用せず単純なリストとして実装されています。そのため、以下の関数はこれらには動作しません。

関数: make-ring size

これにより、size個のオブジェクトを保持できる新しいリングが返されます。sizeは整数である必要があります。

関数: ring-p object

object が環であれば t を、そうでなければ nil を返します。

関数: ring-size ring

これにより、ringの最大容量が返されます。

関数: ring-length ring

これは、ring が現在保持しているオブジェクトの数を返します。この値は、ring-size が返す値を超えることはありません。

関数: ring-elements ring

これにより、ring 内のオブジェクトが、新しい順にリストとして返されます。

関数: ring-copy ring

これにより、ring のコピーである新しいリングが返されます。この新しいリングには、ring と同じ (eq) オブジェクトが含まれています。

関数: ring-empty-p ring

これは、ring が空の場合は t を、そうでない場合は nil を返します。

環における最新の元のインデックスは常に0である。より大きなインデックスは、より古い元に対応する。インデックスは環の長さを法として計算される。インデックス −1 は最も古い元に、−2 はその次に古い元に、というように対応する。

関数: ring-ref ring index

インデックス index で見つかった ring 内のオブジェクトを返します。index は負の値、またはリング長を超える値となる場合があります。ring が空の場合、ring-ref はエラーを示します。

関数: ring-insert ring object

これは ring に object を挿入してそれを最新の要素とし、object を返します。

リングが満杯の場合、挿入時に最も古い要素を削除して、新しい要素のための空きを作ります。

関数: ring-remove ring &optional index

ringからオブジェクトを削除し、そのオブジェクトを返します。引数indexで削除する項目を指定し、nilの場合は最も古い項目を削除することを意味します。ringが空の場合、ring-removeはエラーを示します。

関数: ring-insert-at-beginning ring object

これは ring に object を挿入し、それを最古の要素として扱います。戻り値は重要ではありません。

リングが満杯の場合、この関数は挿入する要素のための空きを作るため、最新の要素を削除します。

関数: ring-resize ring size

ringのサイズをsizeに設定します。新しいサイズの方が小さい場合は、リング内の最も古いアイテムが破棄されます。

リングサイズを超えないよう注意すれば、そのリングを先入れ先出しの待ち行列として利用できます。例えば:

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