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
package -
elisp doesn’t do tail-call optimization.