2017-11-22 8 views
0

주문 대기열을 유지하고 FIFO 처리를 사용하여 주문을 "요리"하려고합니다. 원자를 사용하여 대기열을 업데이트 할 수 있지만 마지막 두 줄은 작동하지 않습니다. 내가 필요한 것은 첫 번째 요소를 제거하고 나머지 목록으로 원자 (대기열)를 업데이트하는 것입니다. 씨에Clojure 업데이트 Atom PersistentQueue

감사합니다, R.

(ns example.atomqueue 
    (:use clojure.pprint)) 

(def orders-queue (atom clojure.lang.PersistentQueue/EMPTY)) 

(defrecord Order [fplate splate]) 

(defn add-order [order] 
    (swap! orders-queue conj order)) 

(add-order (->Order "Soup" "Fish&Chips")) 
(pprint orders-queue) 

(add-order (->Order "Salad" "Hamburger")) 
(pprint orders-queue) 

(add-order (->Order "Rice" "Steak")) 
(pprint orders-queue) 

;;NOT SURE IF CORRECT 
(defn cook-order [orders] 
    (swap! orders-queue (pop orders))) 

;;EXCEPTION 
(cook-order orders-queue) 
+1

당신이 필요로하는 것은 ('아마 defn이 요리를 주문 [] (스왑입니다 주문 -queue pop))' – leetwinski

+0

예, 당신은 라이트입니다. 고맙습니다! – razvan

답변

0

덕분에이 적합한 솔루션이다 leetwinski!

(ns chaptertwo.atom 
    (:use clojure.pprint)) 

(def orders-queue (atom clojure.lang.PersistentQueue/EMPTY)) 

(defrecord Order [fplate splate]) 

(defn add-order [order] 
    (swap! orders-queue conj order)) 

(defn cook-order [] (swap! orders-queue pop)) 

(add-order (->Order "Soup" "Fish&Chips")) 
(pprint orders-queue) 

(add-order (->Order "Salad" "Hamburger")) 
(pprint orders-queue) 

(add-order (->Order "Rice" "Steak")) 
(pprint orders-queue) 

(cook-order) 
(pprint orders-queue)