Once upon a time I was playing with macros and came up with this:
(defmacro my-recursive-fact (n)
(if (= 0 n) '1
(let ((m (1- n)))
`(* ,n (my-recursive-fact ,m)))))
And it worked.
CL-USER> (my-recursive-fact 5)
120
So then I thought it could be a nice way to show students an example of recursion, if I expand this macro using macroexpand:
CL-USER> (macroexpand '(my-recursive-fact 5))
(* 5 (MY-RECURSIVE-FACT 4))
T
That is, no difference between macroexpand-1 and macroexpand in this case. I'm sure that I'm missing some crucial point in understanding macroexpand, and HyperSpec says nothing special about recursive macros.
And also I'm still curious to know if there is a way to expand such kind of macro to it's end.