Queue/Usage: Difference between revisions
Content added Content deleted
(clojure impl) |
|||
Line 174: | Line 174: | ||
<lang clojure> |
<lang clojure> |
||
(defn make- |
(defn make-queue [] |
||
(atom [])) |
(atom [])) |
||
(defn push- |
(defn push-queue [q x] |
||
(swap! |
(swap! q conj x)) |
||
(defn pop- |
(defn pop-queue [q] |
||
(if (pos? (count @ |
(if (pos? (count @q)) |
||
(let [x (first @ |
(let [x (first @q)] |
||
(swap! |
(swap! q subvec 1) |
||
x))) |
x))) |
||
</lang> |
</lang> |
||
Line 189: | Line 189: | ||
<lang clojure> |
<lang clojure> |
||
(defn make- |
(defn make-queue [] |
||
(ref [])) |
(ref [])) |
||
(defn push- |
(defn push-queue [q x] |
||
(alter |
(alter q conj x)) |
||
(defn pop- |
(defn pop-queue [q] |
||
(if (pos? (count @ |
(if (pos? (count @q)) |
||
(let [x (first @ |
(let [x (first @q)] |
||
(alter |
(alter q subvec 1) |
||
x))) |
x))) |
||
</lang> |
</lang> |
||
The <tt>push- |
The <tt>push-queue </tt> and <tt>pop-queue </tt> functions would need to be called from within a <tt>dosync</tt> transaction. |
||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |