What are the major differences between Emacs Lisp and Common Lisp?
There's quite a bit of crossover, especially at the beginner level, so whichever you start with will mostly transfer to the other.
Some of the major differences:
ELisp traditionally used dynamic scoping rules; Common Lisp uses lexical scoping rules. With dynamic scoping, a function can access local variables declared in calling functions and has generally fallen out of favor. Starting with Emacs 24, Emacs allows optional lexical scoping on a file-by-file basis (and all files in the core distribution are progressively being converted).
Dynamically scoped ELisp doesn't have closures, which makes composing functions and currying difficult. There's a
apply-partially
function that works similarly to currying. Note that thelexical-let
form introduced in Emacs 24 makes it possible to produce closures via lexical scoping.Much of the Common Lisp library that has been built up over time isn't available in elisp. A subset is provided by the elisp
cl
packageelisp doesn't do tail-call optimization.
These Emacs-Wiki pages offer some info about the relation between the two Lisps and their differences:
- http://www.emacswiki.org/emacs/CommonLisp
- http://www.emacswiki.org/emacs/EmacsLisp
- http://www.emacswiki.org/emacs/EmacsLispLimitations