The 'macrolet' special form is basically a local block construct that allows local 'macro' definitions
followed by a block of code to evaluate. 
> (macrolet ((pls (n1 n2)     ; MACROLET defining a PLS macro
               `(+ ,n1 ,n2)))
    (pls 4 5))
9
> (pls 4 5)                   ; the PLS macro no longer exists
error: unbound function - PLS
> (macrolet ()                ; an empty MACROLET
    (print 'a))
A  ; screen output of PRINT
A  ; return value
1. In XLISP, only macros defined by defmacro [interned in the *obarray*] can be used with setf:
(setq a #(1 2 3)) (defmacro second-array-element (array) `(aref ,array 1)) (second-array-element a) => 2 (setf (second-array-element a) 'x) => X a => #(1 X 3)
With macros defined by 'macrolet' [stored in the lexical environment],
setf signals a '
(macrolet ((second-element (array)
             `(aref ,array 1)))
  (second-element a))               => X
(macrolet ((second-element (array)
             `(aref ,array 1)))
  (setf (second-element a) 'y))     => error: bad place form
2. In XLISP, the macroexpand and
> (macroexpand-1 '(second-array-element a)) (AREF A 1)
With macros defined by 'macrolet', the macro form is returned unexpanded:
> (macrolet ((second-element (array)
               `(aref ,array 1)))
    (macroexpand-1 '(second-element a)))
(SECOND-ELEMENT A)
In XLISP, the macroexpand and