(declaim (optimize (speed 3) (safety 1))) (defun queue:new () (cons nil nil)) (defun queue:push (datum q) (let ((element (cons datum nil))) (if (car q) (setf (cddr q) element) (setf (car q) element)) (setf (cdr q) element) q)) (defun queue:pop (q) (pop (car q))) (defun queue:peek (q) (caar q)) (defun queue:to-list (q) (car q)) (defun queue:from-list (lst) (cons lst (last lst)))