There are two type of lisp coders. Those that love the loop macro and those that don’t.

I’m one of the former.

Take this beautiful construction:

(loop for item in mylist
      collect (first item) into known-keys
      maximize (second item) into big
      minimize (second item) into small
      finally (return (values known-keys big small)))

Even not knowing what mylist was you could guess that known-keys would be the collection of all the first elements of item, and big and small would be the largest and smallest values in the second part of item.


If I told you that mylist was a list of items that had two elements, viz.

((a . 3) (b . 2) (c . 1))

You’d be able to guess that the result would be something like

(a b c)
3
1

loop is easy to read and reflects the true strength of common lisp - DSLs make readable (and performant) code easy.