Disclaimer: not a big Lisp user.
Interesting how Lisp code is NOT littered with " if something != null, ...", unlike your average Java project (or even python, but it's less visible), and just works.
My understanding is that busines-as-usual handling of nil (empty lists) implicitely confers to Lisp code monadic style which help to avoid tedious checks
This is the way Clojure works too. Nil is treated as an identity/neutral element. This goes beyond lists: in contrast to Common Lisp who equates nil to the empty list, Clojure maintains a distinction and you're supposed to handle nils by correctly implementing functions. This is as easy as using clojure's core functions, they all have been tailored to handle nil as the neutral element.
As a consequence, in Clojure, nil's neutrality extends to other datastructures, for instance (hash)maps. (assoc nil :some :value) => {:some :value}.
I like the idea, but JVM is a show stopper for me :/
Why? I have no particular feelings for or against the JVM. It always surprises me when people get so passionate about runtimes - how much do you interact with them? They're just in the background doing their thing.
I can see reasons for not wanting to use the JVM in specific cases. For example, it may not have the performance you want for the application you're developing.
I'm just confounded by general statements such as "JVM = no go", "I want to use C# but I'm more of a JVM guy than dotnet" (or vice versa).
Is this some bizarre nu-console war that's going on in the programming community that I have missed?
Why => because JVM is poor no fit for CLI, and is a poor fit for games. Those two fields in which I see myself using common-lisp.
Unsure what's so wierd about it, everyone (most) knows about slow cold startup times, and inability to control memory layout in JVM. Also, horrible C bindings