アイテムが前面に追加され、アイテムが前面に追加されるたびにアイテムが削除される固定長スタック(元々はキューと呼んでいましたが、必要なのはスタックです)に最適なデータ構造は何ですか?終わり?さまざまな長さのサブベクトルにも正面からアクセスします。私はベクターを使用していましたが、clojure.lang.PersistentQueueとフィンガーツリーについて考えています。
明確にするために、次のようなものを編集します。
> (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:これまでのすべての回答に感謝します。これは、基本に戻ってJoy of Clojureを読む練習になりました。たとえば、subvecのsubvecが最初のsubvecのベクトルへの参照を保持していることを学び、(vec(cons x(subvec ...を繰り返し使用すると、すべての中間subvecへの参照が発生します。これに照らして、ベクターベースのキューのプッシュのこの実装はどうですか?:
(defn push [v i n] (if (>= (count v) n) (conj (subvec v 1 n) i) (conj v i) ) )
次に、結果のベクトルにrseqを介してアクセスできます。これは、ベクトルを使用すると高速であると私は信じています(index-offsetを使用しているためですか?)