Clojure is especially messy piece of spaghetti code, if you are not already familiar with the underlying engine.
Commonlisp is just ugly with very annoying error processing (how do I get out of here (I made recursive error (while trying to exit from error (what (is (this (shit))))))))).
Scheme is for academics, full of weird stuff, like (local ..), which I am not gonna learn ever.
I find it puzzling that you describe Clojure as spaghetti code because I have literally no idea what you mean with that statement. Spaghetti code, in programming, has a rather specific meaning that I cannot conceive of applying to Clojure. Namely: spaghetti code = unstructured code that abuses goto/jumps or their equivalents. So that sentence makes zero sense as presently written.
Clojure is the most unfun lisp indeed, unless you know java.
Clojure 1.9.0
user=> (+ 'a 1)
ClassCastException class clojure.lang.Symbol cannot be cast to
class java.lang.Number (clojure.lang.Symbol is in unnamed module
of loader 'app'; java.lang.Number is in module java.base of
loader 'bootstrap') clojure.lang.Numbers.add (Numbers.java:128)I agree with him, and I have spent a lot of time scratching my head debugging clojure.
Python gives a better idea of what's wrong, where it's wrong, and what a fix might be.
Here's roughly his example, but in python:
>>> "a" + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects CL-USER 24 > (+ "a" 1)
Error: In + of ("a" 1) arguments should be of type NUMBER.
1 (continue) Return a value to use.
2 Supply a new first argument.
3 (abort) Return to top loop level 0.
Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.
CL-USER 25 : 1 >
There is a clear error message and direct ways to fix/report the problem. Including another REPL to investigate the error. [1]> (loop until sun dies and moon explodes)
*** - LOOP: illegal syntax near DIES in
(LOOP UNTIL SUN DIES AND MOON EXPLODES)
The following restarts are available:
ABORT :R1 Abort main loop
Lisp is not fun general purpose programming language and tiny examples teach you nothing. Only when you are confronted with huge datasets and enormous problems you might appreciate freedom of expression in Clojure vs Javascript.