Destructive Merge Function
public static Cons dmerjr (Cons x, Cons y) { if ( x == null ) return y; else if ( y == null ) return x; else if ( ((Comparable) first(x)) .compareTo(first(y)) < 0 ) { setrest(x, dmerjr(rest(x), y)); return x; } else { setrest(y, dmerjr(x, rest(y))); return y; } }
(defun dmerjr (x y) (if (null x) y (if (null y) x (if (< (first x) (first y)) (progn (setf (rest x) (dmerjr (rest x) y)) x) (progn (setf (rest y) (dmerjr x (rest y))) y) ) ) ) )