| That's not how code reading works. There are at least two levels of code reading: understanding WHAT the program does and understanding HOW it works. Most of the time a Lisp programmer wants to read WHAT the program does and that in a very descriptive notation. Any Lisp has a lot of macros. The base Common Lisp language is full of macros. Any defining operator - functions, macros, variables, classes, structures, methods, ... - is already a macro. For example a structure - a record - is defined like this: (defstruct ship
(x-position 0.0 :type short-float)
(y-position 0.0 :type short-float)
(x-velocity 0.0 :type short-float)
(y-velocity 0.0 :type short-float)
(mass *default-ship-mass* :type short-float :read-only t))
This is using the macro DEFSTRUCT.It's easy to see that it defines a structure type called SHIP with 5 slots. Each slot has a default value and named options. A programmer will NEVER need to see what the expansion looks like. The code the macro generates is twenty times larger than the source code. What the programmer actually needs is a documentation of what effects the macro has: defining a type, defining accessors for the slot, defining a type constraint for the slots, making one slot read only, ... This is better read from the documentation of this macro operator, instead of trying to see it from reading low-level operator code implementing them. Every programmer will be happy to read this macro form - no one wants to see the expanded code, how structures are actually defined in terms of low-level operators. Thus MACROS increase the readability of programs a lot - independent of the team size. Really no one would want to define a structure type by manually creating all the definitions for it (a type, an allocation function, slot accessors, type predicate, compile time effects, ...). What they can make more difficult is some maintenance tasks - where bugs appear on a meta-level where programs transform code. |
(It's a bizarre, mini language for looping constructions and terrifying animals and small children.)