Not speaking for grandparent, I would say that
cond isn't syntax-breaking because it doesn't have to employ grammar -driven parsing to recognize and delimit the clauses and their constituent forms. The nested list structure of
cond that you see
is the real syntax.
defun could be like this, though its ANSI CL specification is quite screwed up.
The sytax is given as:
defun function-name lambda-list [[declaration* | documentation]] form*
where the double square brackets are described in "1.4.1.2.1 Splicing in Modified BNF Syntax" which denotes that a list of elements is to be spliced into a larger structure, and the elements may appear in any order. The description of this idiotic bullshit is convoluted, but an example section gives the gist of just how idiotic:
"For example, the expression
(x [[A | B* | C]] y)
means that at most one A, any number of B's, and at most one C can occur in any order. It is a description of any of these: (x y)
(x B A C y)
(x A B B B B B C y)
(x C B A B B B y)
but not any of these: (x B B A A C C y)
(x C B C y)
Note how the B elements generated by B* can be interspersed! So in the case of
defun it means that we can have variations like:
(defun name (args ...) decl doc decl decl decl body...)
(defun name (args ...) doc decl decl decl decl body...)
(defun name (args ...) decl decl decl decl doc body...)
There can be at most one docstring, and an arbitrary number of declarations, and they can be mixed in any order.
Note that if we interpret A|B*|C as a simple regex notation, it wants all the B's clumped together; someone really had to work hard to concoct this counterintuitive BNF extension.