LISP is Not Functional

By Xah Lee. Date:

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.