web-dev-qa-db-ja.com

LISP-1とLISP-2の違いは何ですか?

LISP-1とLISP-2の違いと、これがClojureとどのように関係するかを理解しようとしましたが、まだ正しく理解できません。誰でも私を啓発できますか?

89
Zubair

wikipedia によると:

関数の個別の名前空間が利点であるかどうかは、LISPコミュニティの競合の原因です。通常、LISP-1対LISP-2の議論と呼ばれます。 LISP-1はSchemeのモデルを指し、LISP-2はCommon LISPのモデルを指します。

基本的には、変数と関数が衝突せずに同じ名前を持つことができるかどうかです。 ClojureはLISP-1です は、同じ名前を関数と変数に同時に使用できないことを意味します。

60
pauldoo

リチャードガブリエルによるこれは paper を読むことを好むかもしれません。これは、LISPコミュニティがLISP1対LISP2で議論していた問題の要約です。最初のいくつかのセクションでは少し密度が高く動きが遅いですが、セクション5を過ぎるまでに読みやすくなります。

基本的に、LISP1にはシンボルを値にマップする単一の環境があり、それらの値は「通常」または関数のいずれかです。 LISP2には(少なくとも)2つのネームスペースがあります(シンボルには、関数値と通常の値のスロットがあります)。したがって、LISP2では、fooという名前の関数とfooという名前の値を使用できますが、LISP1では、名前fooは単一の値(関数など)のみを参照できます。

両者にはいくつかのトレードオフと好みの違いがありますが、詳細については論文を読んでください。 Christian Queinnecの本「LISP in Small Pieces」には、テキスト全体に織り込まれた違いについての議論もあります。

65
Peter McLain