It seems as if there are actually a ton more special case primitives I need to know, when I could get away with a lot less syntax in other languages to be productive.
I think most special forms do not complicate syntax, as they look like your standard s-expressions, they just have differing semantics from regular functions.
If you look at Common Lisp, I feel like you got a point. It is a huge and complicated language, and while it embodies many of the nice Lisp characteristics, I feel like minimalism certainly is not one of them. But there are other Lisps/Schemes that are much smaller, with a lot less special forms.
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, ...
Comments
I think most special forms do not complicate syntax, as they look like your standard s-expressions, they just have differing semantics from regular functions.
If you look at Common Lisp, I feel like you got a point. It is a huge and complicated language, and while it embodies many of the nice Lisp characteristics, I feel like minimalism certainly is not one of them. But there are other Lisps/Schemes that are much smaller, with a lot less special forms.
Take LET:
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, ...