私はそれらがLISPと呼ばれる同じ言語の方言であることを知っていますが、違いは正確には何ですか?可能であれば、構文、特性、機能、リソースなどのトピックを網羅した概要を教えてください。
それらにはすべて共通点がたくさんあります。
(function-name arg1 arg2)
一般的なLISPの特徴的な機能:
Clojureの特徴的な機能:
[]
およびマップ{}
標準リストに加えて標準として使用される()
-ベクトルとマップの一般的な有用性に加えて、これは一般的に読みやすくする革新であると考える人もいます。スキームの特徴的な機能:
上記の人々はいくつかのことを逃しました
Common LISPにはベクターとハッシュテーブルもあります。違いは、Common LISPはベクトルに#()を使用し、ハッシュテーブルには構文を使用しないことです。 Schemeにはベクトルがあります
Common LISPには新しいマクロを使用できるリーダーマクロがあります(Schemeの子孫であるRacketも同様です)。
SchemeとClojureには、Common LISPの非衛生的なマクロとは対照的に、衛生的なマクロがあります
すべての言語は近代的であるか、大規模な改修プロジェクトがあります。 Common LISPは過去5年間に広範なライブラリを取得しており(主にQuicklispに感謝)、Schemeにはいくつかの最新の実装(Racket、Chicken、Chez Schemeなど)があり、Clojureは比較的最近作成されました
Common LISPには組み込みのOOシステムがありますが、他のOO使用したかもしれないシステムとはかなり異なります。特に、強制されていません。しないhaveと書くOOコード。
言語のデザイン哲学は多少異なります。 Schemeは、アクターモデルを理解するための最小限の方言として設計されました。後に教育学に使用されるようになりました。 Common LISPは、生まれた無数のLISP方言を統合するように設計されました。 Clojureは並行性のために設計されました。その結果、Schemeは最小限でエレガント、Common LISPが強力でパラダイムにとらわれない(機能的、オブジェクト指向、何でも)、Clojureは機能的プログラミングを好むという評判を持っています。
LISP-1とLISP-2の違いを忘れないでください。
SchemeとClojureはLISP-1です:
これは、変数と関数の両方の名前が同じ名前空間に存在することを意味します。
一般的なLISPはLISP-2です。
関数と変数には異なる名前空間があります(実際、CLには多くの名前空間があります)。