Lisp-1 と Lisp-2 の違いと、これが Clojure とどのように関係しているかを理解しようとしましたが、まだ正しく理解できていません。誰でも私を啓発できますか?
2 に答える
Richard Gabriel によるこの論文をお読みになることをお勧めします。これは、Lisp コミュニティが Lisp1 と Lisp2 で議論していた問題の要約です。最初の数セクションは少し分厚く、ゆっくりと進んでいますが、セクション 5 を過ぎる頃には非常に読みやすくなっています。
基本的に、Lisp1 にはシンボルを値にマップする単一の環境があり、それらの値は「通常の」または関数のいずれかです。Lisp2 には (少なくとも) 2 つの名前空間があります (シンボルには関数値用のスロットと通常の値用のスロットがあります)。したがって、Lisp2 では、foo という名前の関数と foo という名前の値を持つことができますが、Lisp1 では、名前 foo は単一の値 (関数またはその他) しか参照できません。
この 2 つにはいくつかのトレードオフと好みの違いがありますが、詳細については論文を参照してください。Christian Queinnec の著書 "Lisp in Small Pieces" にも、テキストに織り込まれた違いについての議論があります。
ウィキペディアによると:
関数の個別の名前空間が利点であるかどうかは、Lisp コミュニティでの論争の原因です。これは通常、Lisp-1 対 Lisp-2 の議論と呼ばれます。Lisp-1 は Scheme のモデルを指し、Lisp-2 は Common Lisp のモデルを指します。
基本的には、変数と関数が衝突せずに同じ名前を持つことができるかどうかについてです。 Clojure は Lisp-1であるため、関数と変数に同じ名前を同時に使用することはできません。