LISP is Not Functional
Dear lispers, brace yourselfs, stinging damnation is coming forthwith!
the more i learn about Common Lisp, the more i think it's one screwed up soup. (setf, rotatef, are recent examples)
also, the more i code in lisp (elisp), the more i find it non-functional. Only the outer program skeleton can be comfortably functional. Innards of functions usually cannot be.
lots, lots, of mutations built-in in the lang in a way that forces you to be non-functional. Quick 1 minute typing:
• destructive sort.
• setq setq setq.
• tons of global vars, not just for emacs environment such as buffer, mode states, etc, which are arguably necessary. But, for things like “match-string”.
• lisp's list, of cons, is one DAMNATION. Along with it comes rampant use of pop, push. Any non-trivial coding in lisp is screwing like perl now, except that dealing with list and nested list in perl is actually much more easier than in lisp.
there's a good solution to lisp's non-functional ways.
BAN lispers from using list or cons. Everything should be vector/array instead.
everytime a cons is involved, lispers should get a electric shock.
that will immediately fix majority of lisp's non-functional programing in practice.
though, i'll have to say, the more i read about Clojure, the better it seems. It is very functional, the savior of the lisp name.