Next: Common Lispの移植, Previous: Common Lispとの互換性, Up: Top [Contents][Index]
下記は、このパッケージとより古いQuirozのcl.elパッケージとの間の すべての既知の非互換のリストである。
このパッケージの関数の多重戻り値のエミュレーションは、より古い パッケージのそれと非互換である。あのパッケージは、真のCommon Lisp 多重戻り値にできる限り近付くように試みた; 不幸にも、それは100% 信頼できるものではなく、自由に使われた場合に時おり 意外なことになりがちだった。このパッケージは、よりシンプルな方法を 使う。すなわち、値のリストで多値を置き換える。それは、著しくCommon Lispとは相違するが、より予測可能である。
defkeywordフォームとkeywordp関数は、このパッケージでは
実装されていない。
memberやfloor、ceiling、truncate、
round、mod、rem関数は、Emacs 18またはEmacs 19に
存在する関数との衝突を避けるために、このパッケージでは接尾辞‘*’が
付けられる。より古いパッケージは、単にこれらの関数を再定義し、
組み込みの意味を上書きして、Emacs 19で重大な可搬性の問題を引き
起こした(いくつかのより最近のQuirozパッケージの版は、それらの名前を
cl-memberその他へ変えた; このパッケージは、member*
その他への別名として後者の名前を定義する)。
古いパッケージのバグがあるかCommon Lisp標準と一致しないある種の
関数は、このパッケージの準拠している版と非互換である。たとえば、
eqlやmemberは、あのパッケージではeqやmemq
の同義語であったり、setfはその引数の評価の正しい順序を
保存できなかったり、など。
最後に、より古いパッケージとは異なり、このパッケージは注意深く、
内部名のすべてに接頭辞cl-を付けている。(floatp-safeや
letfのような)追加の機能として明示的に定義されているいくつかの
関数を除いて、このパッケージは、Common Lispの一部ではない、どんな
非‘cl-’シンボルも移出しない。
cl-compatパッケージCLパッケージは、互換パッケージcl-compatのフォームの中に、
古いcl.elのいくつかの機能のエミュレーションを含む。それを
使うためには、あなたのプログラムの中に(require 'cl-compat)を
置くこと。
古いパッケージは、cl-接頭辞や他の表記法なしで、かなりの数の内部
ルーチンを定義していた。これらのルーチンへの呼び出しが、既存のLisp
コードに入り込んでしまっているかもしれない。cl-compatは、下記の
内部ルーチンのエミュレーションを提供する: pair-with-newsyms、
zip-lists、unzip-lists、reassemble-arglists、
duplicate-symbols-p、safe-idiv.
いくつかのsetfフォームは、ユーザコードが直接呼び出す
かもしれない内部関数への呼び出しへ翻訳された。関数setnthや
setnthcdr、seteltがこのカテゴリに入る; それらは
cl-compatで定義されるが、最良の修正はsetfを適正に
使うように変えることである。
cl-compatファイルは、キーワード関数keywordpや
keyword-of、defkeywordを定義する。データとしての
キーワードの使用には反対なので、それらは新しいCL
パッケージによっては定義されない。
キーワード引数構文解析用のbuild-klistメカニズムは、
cl-compatでエミュレートされている; しかし
with-keyword-argsはエミュレートされておらず、どんな場合でも、
defun*によって提供されるより自然なキーワード引数処理を
使うように変えるのが最良である。
多重戻り値は、2つのCommon Lispパッケージで異なって扱われる。古い
パッケージの方法は、真のCommon Lispにより互換だったが、ある場合には
偽の多重戻り値を報告することを引き起こす発見的方法を使った。
cl-compatパッケージは、古いCLパッケージと互換の多重値マクロの
集合を定義する; 再び、それらは本質的に発見的であるが、古いパッケージの
マクロが動作するところならどこでも動作することが保証される。“公式の”
多重値機能との名前の衝突を避けるため、cl-compatのそれは
大文字で始まる名前を持つ: Values、Values-list、
Multiple-value-bindなど。
関数cl-floorやcl-ceiling、cl-truncate、
cl-roundは、古いスタイルの多値メカニズムを使うために、ちょうど
それらが古いパッケージでしたのと同じようにcl-compatで定義される。
より新しいfloor*や友人は、多値としてではなくリスト中にその2つの
結果を戻す。古いパッケージの古い版は、ありのままの名前floorや
ceilingその他を使ったことに注意せよ; それらはEmacs 19の組み込み
のものと衝突するので、cl-compatはそれらの名前を使えない。