> `(== a b)` is clearly worse than `a == b`
It's clearly worse just because it moved from infix to prefix and is wrapped by parens? Is `(* (+ a b) (+ c d))` clearly worse than `(a + b) * (c + d);`? Both have a bunch of parens, and one even has a semi colon.
This works both ways. `(list 1 2 3)` is clearly better than:
var l = new List();
l.add(1);
l.add(2);
l.add(3);
It's also better than `var l = [1, 2, 3];`How often are you trying to make sense of a bunch of infix arithmetic operations when you're programming? Separately, how often are you creating data structures, navigating data structures, handling data in the form of JSON or XML, parsing that data into your language's native data structures, etc.?
Reading arithmetic in prefix instead of infix is easy, even if it is counter to how you were taught in elementary school. Working with s-expressions for code and data is clearly better than whatever syntax your language uses for code and either directly instantiating data or reaching for JSON or XML.
> justify its lack of static typing
Racket has both Typed/Racket as well as contracts.