多くの Lisp システムは、Lisp 自体で書かれています。
Clozure CL はその一例です。Clozure CL は Clozure CL で書かれています (一部の C とアセンブラーを使用)。Clozure CL はそれ自体をコンパイルできます。
したがって、Clozure CL の多くの/ほとんどの Common Lisp 関数は、Clozure CL で記述されています。したがって、組み込み機能を定義または再定義できる、ある種のスイッチが必要です。したがって、実装のソース コードを編集して変更する方法は間違いなくあります。Lispシステムの機能が損なわれないように、定義が「正しい」ことが最善です。通常、再定義はインライン化された関数や既に展開されたマクロには影響しないことに注意してください。
一般的なプログラマーが Clozure CL を使用すると、一部のパッケージが保護され、シンボルの再定義が許可されず、エラーが通知されます。ただし、続行して内部関数を変更することはできます。多くの Common Lisp ではいつものように、それらは変更に対して広く開かれていますが、これにはプログラマーとして正しいことを行う責任が伴います。
Lisp 内部関数を変更する場合、永続的な損傷を残す方法がいくつかあります。
画像を保存して後で使用する
それを使用して、CCL 自体またはその一部を再コンパイルします
ファイルをコンパイルすると、生成されたコードが元のコンパイラとは異なる可能性があります
ファイルをコンパイルすると、生成されたコードに、変更された Lisp 関数のインライン バージョンが含まれている可能性があります。
そのようなファイルをロードすると、init ファイルを介して自動的にロードされ、変更が含まれ、変更されたコードは現在実行中の Lisp の一部になります。