lambda-list -> ( {var}*
                 [ &optional {var | (var [initForm [pvar]])}* ]
                 [ &rest var ]
                 [ &key {var | ({var | (keyword var)} [initForm [pvar]]) }*
                        [&allow-other-keys] ]
                 [ &aux {var | (var [initForm])}* ] )

Notes:
- Lambda lists for macros support destructuring.
- Parentheses are taken literally as actual parentheses in lisp.
- Braces indicate grouping.
- Brackets surround optional parts.
- Pipes separate alternative parts.
- Ssterisks indicate zero of more of the form it follows.
- Symbols beginning with & are taken literally.
- The ordering of sections is not flexible.