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
はそれらの名前を使えない。