<p><pre><code>    (func arg1 arg2 (func arg3))
</code></pre>
That&#x27;s the syntax of function calls.<p>But Lisp has a few special forms and zillions of macros. Most of them are syntax.<p>Lisp has IF. What is the syntax of IF?<p><pre><code>    IF form then-form else-form+
</code></pre>
Lisp has COND. What is the syntax of COND?<p><pre><code>    cond {clause}*
    clause::= (test-form form*) 
 </code></pre>
List has DEFUN. What is the syntax of DEFUN?<p><pre><code>    defun function-name lambda-list [[declaration* | documentation]] form*
</code></pre>
Now what is the syntax for LAMBDA-LIST?<p><pre><code>    lambda-list::= (var* 
                    [&amp;optional {var | (var [init-form [supplied-p-parameter]])}*] 
                    [&amp;rest var] 
                    [&amp;key {var | ({var | (keyword-name var)} [init-form [supplied-p-parameter]])}* [&amp;allow-other-keys]] 
                    [&amp;aux {var | (var [init-form])}*]) 
</code></pre>
and so on...<p>&gt; It&#x27;s one of the strengths of Lisp imo; that you don&#x27;t need to think much about how the parser is going to interpret your code (ie. missing semi-colons, whitespace, use curly brace here, square bracket there, etc.), just stick to (func arg1 arg2) and all you&#x27;re left with is your own logic errors.<p>What you describe is just the data syntax for s-expressions. Not the syntax of the programming language Lisp.