I've read and understood that not all s-exps are necessarily valid forms. In particular, valid list forms must start with a symbol that will be evaluated as being either:
- a function name
- a macro name
- a built-in form
If that's the case, then what happens in the reader and evaluator when I type this:
((lambda (a) (+ 1 a)) 1)
-> 2
The first element of that list is not a symbol, it's a list. So how come it evaluates? Is the reader doing something special here?