Constructive Merge
The easiest way to understand this idiom is a simple merge that constructs a new list as output.
public static Cons merj (Cons x, Cons y) {
if ( x == null )
return y;
else if ( y == null )
return x;
else if ( ((Comparable) first(x))
.compareTo(first(y)) < 0 )
return cons(first(x),
merj(rest(x), y));
else return cons(first(y),
merj(x, rest(y))); }
(defun merj (x y)
(if (null x)
y
(if (null y)
x
(if (< (first x) (first y))
(cons (first x)
(merj (rest x) y))
(cons (first y)
(merj x (rest y))) ) ) ) )
What is O()? Stack depth? Conses?