It does not
lead to the LOOP macro. The LOOP macro is a special approach for an embedded language for iteration. It's coming from on an older idea from Interlisp: Conversational LISP.
http://www.softwarepreservation.org/projects/LISP/interlisp/...
> This essentially adds a FOR statement to LISP
LOOP provides quite a bit more than a `FOR` statement: various forms of iteration and stepping, value accumulation, termination, flow control, ...
It's basically a special style of embedded DSL for it iteration. If one wants to implement such a thing, there is only a way through macros in Lisp. There are lots of iteration macros for Lisp - most have a slightly simplified grammar, though not necessarily less features (see the ITERATE macro, which has more features than LOOP plus more parentheses).
In other language this would have to be implemented in the language's internal implementation.
> Because this is a macro, ...
Similar to DO, DO*, DOTIMES, DOLIST, ... which are all macros in Common Lisp.
> if you have to debug or step, you get to do so through the expanded code.
like so much in Common Lisp and like so much in Lisp in general. Source translations are quite typical for this language family. It makes debugging quite a bit more difficult.
For an alternative to this look at SERIES, which is also implemented with macros, but looks and works completely different.
http://lispm.de/docs/cltl2/clm/node347.html#SECTION003400000...
Generally stepping is difficult in Lisp. If you would want to step through a call to a MAP function, you will step through its implementation and repeated calls to a closure argument, which might not be pretty.