SchemeAndLisp

<krystal2> what are the differences between comonlisp, scheme and elisp?
* datamatrix sits back to watch

forcer, [[KingNato?]], Khmar, and others reply:

EmacsLisp has DynamicScoping by default, Scheme and CommonLisp don’t. That’s probably the biggest difference.

Emacs Lisp and Common Lisp think that (eq nil ()), Scheme has separate values for boolean-false and empty-list.

In Emacs Lisp and Common Lisp, functions and variables have two different namespaces, while in Scheme they have the same.

The Emacs Lisp byte-compiler does not eliminate tail calls. Common Lisp does not require tail call elimination, but many CL implementations will happily perform this optimization for you. The Scheme standard requires Scheme implementations to eliminate tail calls (which Schemers refer to as “proper tail recursion”). See ConcurrentEmacs for some related discussion.

Common Lisp has a standard module system. Scheme has several non-standard ones (usually, implementation-dependent), but the draft of R6RS includes one. Emacs Lisp has no real module system.

Scheme is much smaller than Common Lisp; Common Lisp has more library features, and a much longer language reference.

Common Lisp has a standard object system (CLOS). Scheme has several non-standard ones (some portable). Emacs Lisp has a single non-standard one EIEIO. (A Schemer would consider this to be part of the library, btw)

Scheme favors FunctionalProgramming over imperative programming, but doesn’t make the latter impossible. CL doesn’t really favor one. Emacs Lisp makes functional programming difficult to impossible.

Other than that, the differences are mostly syntactic.

See also EmacsLispLimitations, WhyDoesElispSuck, DownWithEmacsLisp.


CategoryCode CategoryProgramming