Ответ 1
Здесь довольно много кроссовера, особенно на уровне новичка, поэтому в зависимости от того, что вы начнете, в основном переносятся на другой.
Некоторые из основных отличий:
-
elisp традиционно применяет правила динамической оценки; Common Lisp использует лексические правила определения области. При динамическом масштабировании функция может обращаться к локальным переменным, объявленным в вызывающих функциях, и, как правило, не соответствует требованиям. Emacs имеет форму
lexical-let
, которая имитирует лексическое охват, а последние версии emacs допускают возможность лексического охвата на основе функциональных функций. -
elisp не имеет замыканий, что затрудняет выполнение композиционных функций и каррирование. Там есть функция
apply-partially
, которая работает аналогично currying. Обратите внимание, что формаlexical-let
, введенная в Emacs 24, позволяет производить замыкания посредством лексического охвата. -
Большая часть общей библиотеки Lisp, которая была создана с течением времени, недоступна в elisp. Подмножество предоставляется пакетом elisp
cl
-
elisp не выполняет оптимизацию хвостового вызова.