errcatch in Lisp



I tried to use errcatch in some Lisp code, but I couldn't get it to
work.  So I tried translating a bit of code from Maxima to Lisp,
but the translated Lisp code didn't work as expected:

(C1) xsub(e,x) := block([ ], errcatch(substitute(0,x,e)));
(D1) xsub(e, x) := BLOCK([], ERRCATCH(SUBST(0, x, e)))
(C2) xsub(1/x,x);
Division by 0
(D2)                    []

/* xsub works as expected; let's translate xsub */
(C3) translate(xsub);
(D3)                  [xsub]

/* now, xsub gives an error message but doesn't return []. */
(C4) xsub(1/x,x);
Division by 0
 -- an error.  Quitting.  To debug this try DEBUGMODE(TRUE);)


How can I use errcatch in a function similar to xsub in Lisp?

Barton