Jaka jest najlepsza struktura danych dla stosu o ustalonej długości (początkowo nazywam to kolejką, ale to, czego chcę, to stos), gdzie elementy są dodawane z przodu i za każdym razem, gdy element jest dodawany z przodu przedmiot jest usuwany z końca? Różne długości podvektorów będą dostępne również z przodu. Używałem wektorów, teraz myślę o clojure.lang.PersistentQueue i palcach.Stała struktura stosu w Clojure
edycja, w celu wyjaśnienia, coś takiego:
> (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: Dzięki za wszystkie odpowiedzi tak daleko, to stał się ćwiczeniem wracając do podstaw i czytanie Joy of Clojure, uczących się na przykład, że subvec z subvec zachowuje odwołanie do wektora pierwszego subvec, podczas gdy coś takiego jak (vec (cons x (subvec ..., jeśli byłby używany wielokrotnie powtarzały odniesienia do wszystkich pośrednich subvec .W świetle tego, jak o tej realizacji push for a vector w kolejce?:
(defn push [v i n] (if (>= (count v) n) (conj (subvec v 1 n) i) (conj v i)))
następnie uzyskany wektor mogą być dostępne za pośrednictwem rseq który moim zdaniem jest szybki wektorami (z powodu jego użycia indeksu offset?)
Dangit! Kradnąc moją reputację SO, łącząc się z moją biblioteką? Oczywiście, że jestem dzieciakiem. Właściwie to jestem ciekawa, jak to znalazłeś, ponieważ nie reklamowałem go w ogóle, a wyszukiwarka google dla 'clojure ring buffer' nie ujawnia niczego strasznie łatwo. – amalloy
Znalazłem go w Google w pewnym momencie i teraz jest w moich zakładkach;). Dzięki! – DanLebrero
Przepraszam za wyjaśnienie, ring-buffer byłby idealny, gdyby jego elementy zostały dodane i zerknął z przodu i wyrzucony od końca. Jest to ten sam problem, który miałem z PersistentQueue: conj dodaje się do końca, ale zerkam z przodu, ale zależy mi tylko na najnowszych elementach (lifo) z najstarszymi przedmiotami usuniętymi najpierw – Hendekagon