19 lines
504 B
Plaintext
19 lines
504 B
Plaintext
defstruct(queue(in=[], out=[]))$
|
|
|
|
enqueue(x, q) := (q@in: cons(x, q@in), done)$
|
|
|
|
dequeue(q) := (if not emptyp(q@out) then first([first(q@out), q@out: rest(q@out)])
|
|
elseif emptyp(q@in) then 'fail
|
|
else (q@out: reverse(q@in), q@in: [], first([first(q@out), q@out: rest(q@out)])))$
|
|
|
|
q:new(queue); /* queue([], []) */
|
|
enqueue(1, q)$
|
|
enqueue(2, q)$
|
|
enqueue(3, q)$
|
|
dequeue(q); /* 1 */
|
|
enqueue(4, q)$
|
|
dequeue(q); /* 2 */
|
|
dequeue(q); /* 3 */
|
|
dequeue(q); /* 4 */
|
|
dequeue(q); /* fail */
|