だけcompletenesのため、純粋なClojureのバージョンは次のようになります。
(defn deque
([]
'[()()])
([& elems]
[elems '()]))
(defn push-front [deque elem]
(let [[head tail] deque]
[(cons elem head) tail]))
(defn push-back [deque elem]
(let [[head tail] deque]
[head (cons elem tail)]))
(defn pop-front [deque]
(let [[head tail] deque]
(if (empty? head)
[(-> tail reverse rest) head]
[(rest head) tail])))
(defn pop-back [deque]
(let [[head tail] deque]
(if (empty? tail)
[tail (-> head reverse rest)]
[head (rest tail)])))
(defn peek-front [deque]
(let [[head tail] deque]
(if (empty? head)
(-> tail reverse first)
(first head))))
(defn peek-back [deque]
(let [[head tail] deque]
(if (empty? tail)
(-> head reverse first)
(first tail))))
;; usage example:
user> (let [dq (deque)]
(-> dq
(push-front :a)
(push-front :b)
(peek-back)))
:a
user> (let [dq (deque)]
(-> dq
(push-front :a)
(push-front :b)
(pop-back)))
[() (:b)]
user> (let [dq (deque)]
(-> dq
(push-back :a)
(push-back :b)
(peek-back)))
:b
おかげで多くのことを。実際に私の質問では、** java.util.Queue **ではなく** java.util.DeQueue **を意味していました。しかし、あなたの答えは関係なく保持されます(私は私の質問を修正するでしょう)。 java.util.ArrayDeque(Dequeの実装を提供する)の提案に特に感謝します。私は[deque-clojure](https://github.com/pjstadig/deque-clojure/blob/master/test/name/stadig/test/deque.clj)を見ていましたが、もっと単純なものがあることを期待しました(私はできませんでしたコードに従ってください)。 – DarrylG