> Every lisp hacker I ever met, myself included, thought that all those brackets in Lisp were off-putting and weird.
Not me. I used C before Lisp, and Pascal before that. C replaced syntax like BEGIN and END and "END " with just { }. I thought this was a most excellent thing.
I was still not using Lisp when HTML and then XML came along. My reaction to XML was this: since most of the content of XML is payload data, why don't we just fscking use parentheses or braces to structure it? Some {foo bar {baz}} or whatever instead of this moronic, bandwidth-wasting, unreadable nonsense ....
I could understand it when the markup is just a few raisins in the pudding like:
> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
but this XML thing made no sense as a data notation in which every little leaf element is wrapped in verbiage.
So then when I got into Lisp, it basically had the syntax I already wanted; it was "pre-approved".
I already liked parentheses because they occur in English prose (like this), in mathematics, and in almost every programming language I had ever used.
The Unix shell and other command languages eliminate the commas: we don't write
tar, czvf, foo.tar.gz, foo
Moreover, command arguments are not restricted to narrow lexical categories like "must begin with letter or underscore ..."; they are just clumps of non-whitespace characters. If you know any command languages, what Lisp is doing in that regard is obvious; you're not confused by a+b just being an argument, different from a + b.Commands with the main function on the left followed by space-separated arguments occur in parentheses in POSIX command substitution syntax:
printf "[%s]\n" "$(cat file1 file2)" > file3
dironly=$(basename $(dirname a/b/c))
In general, by the time I got into Lisp I had written so many scanners and parsers, solved so many shift-reduce and reduce-reduce conflicts and whatnot, I knew a good thing when I saw it.YAML sort of addresses this, but I really wish companies would just go with Lisp when they want to do weird DSL's, such as, ahem, Ansible with their weird YAML. As weird as Lisp is, it can never be as weird as learning idiosyncratic languages for different products. It is the most minimalist machine-human compromise for lists of lists.