Hacker News new | ask | show | jobs
by lispm 1039 days ago
> I think most special forms do not complicate syntax, as they look like your standard s-expressions

Take LET:

  (let ((a b) (c d) e (f g))
    (declare (type integer a))
    (+ a b c d e f g))
It does not look like (foo arg0 arg1 ... argn).

Instead it takes a binding list, which is not evaluated. Where bindings can take a variable and a value. The value is evaluated, the variable not. The follows a declaration, which is not evaluated either, but which can be used by the compiler... There are lots of declarations forms: allocation, scope, optimization, types, ...