固定長スタック(私はもともとはキューと呼ばれていましたが、私が欲しいのはスタックです)は、項目が追加され、項目が追加されるたびにアイテムは最後から削除されます。さまざまな長さのサブベクトルも前面からアクセスされます。私はベクトルを使用していましたが、今ではclojure.lang.PersistentQueueと指の木について考えています。明確にするClojureの固定長スタック構造
編集、、のようなもの:
> (def q (queue [1 2 3 4]))
[1 2 3 4]
> (push q 9 8 7)
[7 8 9 1]
> (peek (push q 9 8 7))
7
EDIT2:すべてのあなたの答えのためのおかげで今のところ、これはそのインスタンスの学習、基本に戻るだろうとのClojureの喜びを読んで、運動になっていますサブベクトルのサブベクトルは、最初のサブベクトルのベクトルへの参照を保持します(vec(cons x(subvec ...)を繰り返し使用すると、すべての中間サブベクトルへの参照が発生します)。ベースのキュー?:
(defn push [v i n] (if (>= (count v) n) (conj (subvec v 1 n) i) (conj v i)))
その後、得られたベクターは、私はベクトルと高速であると信じていRSEQを介してアクセスすることができた(原因の使用にインデックスオフセット?)
Dangit!私の図書館にリンクして私の評判を盗みましたか?私はもちろん、子供です。実際に私はあなたがそれを見つけたのか不思議です。私はそれをまったく宣伝していないので、 'clojure ring buffer'のgoogle検索は何もひどく簡単には上がらないからです。 – amalloy
私はある時点でgoogleで見つけて、今は自分のブックマークに入れています;)。ありがとう! – DanLebrero
リングバッファは、そのアイテムが追加されて前面から覗き見され、最後から取り出されると、完璧なものになります。私はPersistentQueueと同じ問題です:conjは最後に追加しますが、前面にはピークが表示されますが、最も古いアイテム(lifo)は最初に削除されます。 – Hendekagon