Tail Recursive Merge
(defun merjtr (x y) (nreverse (merjtrb x y '())))
(defun merjtrb (x y result)
(if (null x)
(if (null y)
result
(merjtrb x (rest y) (cons (first y) result)) )
(if (or (null y)
(< (first x) (first y)))
(merjtrb (rest x) y (cons (first x) result))
(merjtrb x (rest y) (cons (first y) result)))))
1> (MERJTR (3 7 9) (1 2 4))
2> (MERJTRB (3 7 9) (1 2 4) NIL)
3> (MERJTRB (3 7 9) (2 4) (1))
4> (MERJTRB (3 7 9) (4) (2 1))
5> (MERJTRB (7 9) (4) (3 2 1))
6> (MERJTRB (7 9) NIL (4 3 2 1))
7> (MERJTRB (9) NIL (7 4 3 2 1))
8> (MERJTRB NIL NIL (9 7 4 3 2 1))
<8 (MERJTRB (9 7 4 3 2 1))
<7 (MERJTRB (9 7 4 3 2 1))
<6 (MERJTRB (9 7 4 3 2 1))
<5 (MERJTRB (9 7 4 3 2 1))
<4 (MERJTRB (9 7 4 3 2 1))
<3 (MERJTRB (9 7 4 3 2 1))
<2 (MERJTRB (9 7 4 3 2 1))
<1 (MERJTR (1 2 3 4 7 9))