Iterative Destructive Merge
(defun dmerj (x y)
(let (front end)
(if (null x)
y
(if (null y)
x
(progn
(if (< (first x) (first y))
(progn (setq front x)
(setq x (rest x)))
(progn (setq front y)
(setq y (rest y))))
(setq end front)
(while (not (null x))
(if (or (null y)
(< (first x) (first y)))
(progn (setf (rest end) x)
(setq x (rest x)))
(progn (setf (rest end) y)
(setq y (rest y))))
(setq end (rest end)) )
(setf (rest end) y)
front))) ))