下記は、このパッケージとSteele(第2版)に文書化されたCommon Lispとの間の すべての既知の非互換のリストである。
member
やassoc
、floor
のようなある種の関数名は、
(非互換な)Emacs Lisp関数によってすでに取られていた; このパッケージは、
これらの関数のCommon Lisp版の名前に‘*’を付加する。
語defun*
は、拡張されたCommon Lisp引数リストを関数で使うために、
defun
の代わりに必要である。同様に、defmacro*
と
function*
は、これらのフォームの完全な機能の引数リストを理解する
版である。&whole
キーワードは、defmacro
引数リストでは
(再帰的引数リストの中を例外として)動作しない。
効率的な実装を許すために、キーワード引数は、キーワードシンボルが他の
キーワード引数の値として渡された場合に混乱するかもしれない、
わずかに下等な構文解析器を使う(つまり、
(memq :keyword rest-of-arguments)
が、与えられた
キーワード引数の中を:keyword
を見つけようと走査するために
使われる)。
eql
とequal
述語は、IEEE浮動小数点の正の0と負の0を
区別しない。equalp
述語は、Common Lispといくつかの相違がある;
see 述語.
setf
メカニズムは完全に互換だが、setf-methodは5つの値を
直接戻すのではなく、5つの値のリストを戻す点が異なる。また、
((defun (setf foo) …)
が典型的であるような)新しい
“setf
関数”の概念は実装されていない。
do-all-symbols
フォームは、obarray引数がない
do-symbols
と同じである。Common Lispでは、このフォームはすべての
パッケージ中のすべてのシンボルの上で繰り返す。Emacsのobarrayは、
ファーストクラスのパッケージメカニズムではないので、
do-all-symbols
が既定のobarray以外を確認する方法はない。
loop
マクロは、loop-finish
と型指定子が実装されていない
点を除いて完全である。
多値戻し機能はリストを多値として扱うが、それはEmacs Lispは多重戻り値を
直接サポートしないためである。values
またはvalues-list
が、
multiple-value-bind
や他の多値受け取り側へ戻るために常に使われる
場合、マクロはCommon Lispと互換だろう; values
が
multiple-value-…
なしで使われたり、
multiple-value-…
がvalues
なしで使われたりする場合、
効果はCommon Lispとは異なるだろう。
多くのCommon Lisp宣言は無視され、その他は概念としてはCommon Lisp標準に
マッチするが、詳細はマッチしない。たとえば局所special
宣言は、
Emacs Lispでは純粋に助言だが、Steeleの本に規定されたスコープ規則に
厳密には従わない。
変数*gensym-counter*
は、0ではなく疑似乱数値で開始する。これは、
生成されたシンボルは、ファイルへ書かれ、ファイルからロードされたときに
internされるという事実をうまく処理できる。
defstruct
機能は互換だが、構造体は、ある特殊な別の型ではなく、
既定では:type vector :named
の型である点が異なる。
また、:type
スロットオプションは無視される。
check-type
の第2引数は異なる扱いをされる。