CommonLispの利点であるContraChuckは、実装が固執して努力する標準を備えているため、主にSBCL(優れた型チェックと推論を備えています)を使用して開発し、たとえば、 Cライブラリ(ECLなどを使用)またはJavaライブラリを使用する.jar(ABCLを使用)、またはMacまたはWindowsネイティブGUI(Clozure、両方)。Common Lispは、アーキテクチャ間、実装間、および時間の経過とともに驚くほど移植性があり、Common Lispersは、言語のサポートを受けて、このように物事を維持するよう努めています。例として、標準化されていない動作の1つのばかげた相違は、「これは特別な変数ですか?」という質問です。だから私は私が使用する実装全体でそれに答えました:
#-abcl
(defun special-variable-p (symbol)
#+ecl(si:specialp symbol)
#+ccl(proclaimed-special-p symbol)
#+sbcl(equal '(:special t)
(multiple-value-list-int:info :variable :kind symbol)))
これは、読み取り時に、ABCL(すでにこれを持っています)、(defun special-variable-p (symbol) (si:specialp symbol))
ECLなどで何も削減しません。したがって、これを.rcファイルに入れて、REPLで共通関数を使用できます。ただし、これはそれほど重要ではありません。これは、スレッド化やさまざまなバックネットワーク、またはCommunicatingSequentialProcessesライブラリではありません。この最後の例には#+sbcl/#-sbcl
、5つの実装で実行されている場合でも、1つしかありません。慎重に移植されたコードに依存しているためです。
しかし、この(および他の)利点を可能にするものは、学習者に独自の課題をもたらします。CommonLispは非常に大きな言語です。私がClojureをやったように、それは1、2週間で丸呑みできるものではありません(しかし、私のClojureは、展開するように設定された重大な変更ですでに衰退しています-その言語は、それ自体のメリットがありますが、 Common Lispについて私が気に入っていることはたくさんあります。)したがって、このページをたくさん読んで、HyperSpecをキーを押したままにして(私にとってM-x hyperspec RET do-symbols RET
は、聖書に十分近い)、数冊の本を購入することを検討する必要があります。私はPracticalCommonLispを持っていて、 Let Over Lambdaを入手したばかりで、すぐにPAIPを購入する予定です。
しかし、Common Lispが真の答えであるとしても、一見派手な代替案を「選ぶだけ」で時間を完全に無駄にすることはありません(-「欺瞞的」なのは、ありふれたCLは、そのマクロが実行できるすべてのことを示していないからです。誰よりも多くの種類のマクロがあります。通常の比較は、不正なCLと構文が最適化された代替X)の間です。あなたはまだ基本を学び、SICP、On Lisp、The LittleSchemerなどで読むことができるものの多くをまだ使うことができます。Lispは、間違ったLispでさえ、非Lispよりも優れています。(しかし、あなたは正しいLispの一部を、不十分に、間違ったLispに実装することにあなたの時間のいくらかを費やすでしょう。Meta-Greenspun。)