私は最近、Common Lisp 標準に従っていれば、学校の関数型プログラミング コースで Lisp の方言を使用できることを知りました。Clojure はこの標準に従っていますか? 違いすぎませんか?
4 に答える
Clojure は Common Lisp 標準に従っていません。これはまったく新しい Lisp です。
そうは言っても、それは Common Lisp と多くのことを共有しているので、一方で得た知識は一般的に他方に適用できます。
多くの重要な点は同じです。
- リストの先頭に関数を置き、その後にその引数を付けることによる関数適用:
(my-function arg1 arg2)
- 「コードはデータ」 - コードは、Lisp データ構造でもあるホモイコニック形式で表現されます
- どちらも強力なマクロ システムを備えています。任意のコードを生成する関数を記述できます。
- それらは動的言語であり、
- どちらもREPLを使用したインタラクティブな開発を強調しています
- どちらも正常にコンパイルされています
異なる点:
- Clojure は関数型プログラミングに重点を置いています。すべてのデータ構造は不変であり、コア ライブラリは主に「純粋な」関数で構成されています。注: Common Lisp ではまだ関数型スタイルを使用できますが、Clojure はそれを最前線に置いているだけです。
- Clojure はLisp-1 (Scheme 関数とデータが同じ名前空間を共有するように) であるのに対し、Common Lisp はLisp-2 (関数とデータは異なる名前空間を持つ) です。
- Clojure には、従来の Lisp リストに加えて、maps 、 vector 、および setsの新しいリテラルがあります。
{}
[]
#{}
()
- Common Lisp はリーダー マクロをサポートしています。これにより、言語の構文をカスタマイズする能力が向上します。
- Clojure は、STM を介して同時実行性、ID、および状態を管理する新しいアプローチを採用しています - http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickeyを参照してください
- Clojure は「ホスト プラットフォームを受け入れる」ように設計されています(通常は JVM ですが、CLR も含まれます。最近では、ClojureScript を介して JavaScript をターゲットにすることに多くの関心が寄せられています)。ライブラリ/ツールの配列。
- Clojure の標準はありません。これは1 つの主要なオープン ソース実装を備えたBDFL 主導の言語です。Rich Hickey が BDFL であることは非常に役立ちます。彼は天才です。
主観的な意見: 私は偏見がありますが、最近 Lisp を選択している場合、ほとんどの現代的な使用法では Clojure が間違いなく適していると思います。これは Lisp を現代的に再設計したものであり、非常に活気に満ちた革新的なコミュニティがあり、実用的な選択肢です。 「物事を成し遂げる」。
Common Lispの方言を使う必要はありません。Common Lisp の優れた実装がたくさんあります - 完全な Common Lisp に多くの拡張機能を提供する実装です。
Lisp を使用した教育用プログラミングには、優れたコンパイラを提供するSBCLをお勧めします。CCL (Clozure Common Lisp) も良い選択です。どちらも Linux と Mac OS X で特にうまく動作します。
Common Lisp の方言 (大規模な知識ベース システムである Cyc の開発に使用される SubL など) と、Common Lisp に関連する言語 (AutoCAD の Visual Lisp、GNU Emacs または ISLisp の Emacs Lisp など) がありますが、それらを教育に使用する意味はありません。標準的な Common Lisp の実装は数多く存在し、優れています。
Clojureは Common Lisp の方言ではなく、別の言語です。
Clojure は独自の言語であり、Common Lisp 言語の実装ではありません。そのため、Common Lisp 標準には従いません。
あなたの教授が言いたかったのは、Common Lisp の実装によっては、標準の一部ではない多くの余分な機能が追加されており、あなたの教授はそれらの機能を使用することを望んでいないということだと思います。したがって、SBCL や Clozure など、好みの Common Lisp 実装を選択し、その特定の実装に固有ではない実際の Common Lisp 関数やテクニックなどのみを使用してください。言い換えれば、あなたが書いたコードは、理論的にはどの Common Lisp 実装でも動くはずです。
Clojure、Scheme などは、独自の標準 (該当する場合、「標準」という言葉は意味に応じてさまざまなレベルの厳密さがあります) を持つ Lisp の方言であり、Common Lisp と同じではありません。つまり、Common Lisp 標準に準拠していないことは確かです。
率直に言って、Lisp 言語について話すとき、「方言」は通常、別の方言と同じ標準を持たない、まったく異なる Lisp 言語を指します。したがって、「Common Lisp のさまざまな方言」と言うのは意味がありません。しかし、「Lisp のさまざまな方言」と言うことができます。