新しい言語を学びたいと思っています。私はLispで始めることを考えました。私はLispを学ぶかどうか知りたいのですが、私はClojureも(最小の労力で)知っていますか?LispとClojureの構文に大きな違いがありますか?ClojureとLispの構文に大きな違いがありますか
答えて
構文の違いはほとんどありません(主にLispファミリの言語はほぼで、構文はです)が、他の部分には確かに違いがあります。 Clojureは、Common Lispのような "古典的な" Lispには存在しない高いスケーラビリティ(アクター、リファレンスなど)に特に適した最新のプログラミング機能を多数備えています。
ClojureはLispの活発でよくサポートされている方言です。あなたがLispを学びたいなら、Clojureで本当に間違って行くことはできません。
詳細は、Which Lisp should I learn?の回答を参照してください。
「Lisp」自体が単一の特定の言語よりも多くの言語(Clojureを含む)であるため、LispはあなたがCommon Lispを意味すると思います。 Clojureがより現代的なLispであることを意図した構文上の変更があります。例えば、Common Lispの一部ではない{} sのマップ、{}のマップを作成することができます。もちろん、Javaの相互運用性は必然的にClojureの重要な部分になります。
[]と{}は、CLのユーザー拡張用に予約されています。ベクトルは#(...)と書かれています。そのレベルの文字構文は、ライブラリによって提供することができます。実際にはそうです。構文がユーザー拡張可能で、[]と{}の使用がライブラリで使用できるので、CLはより現代的なLispでしょうか? –
Common Lispは、通常Just Lispと呼ばれます。同様に、Lispは通常Common Lispを意味します。 Lispファミリは、通常、lisp、またはlispと呼ばれます。 – Marko
私はそれはあなたが原則LISPのを学ぶ場合にもClojureのとその逆の原則を知っていると言うことは公正だと思います。彼らはすべて同じ考え方に根ざしており、次のようなものを強調しています。
コードはデータです。マクロはコードを操作する単なる通常の関数です。
データとコードを表すのにS-expressionsを使用する。
基本的な構造としてのリスト/シーケンスの概念。
ファーストクラスの機能を備えた機能プログラミング。
それとは別に、構文の違いがたくさん、ライブラリ、ランタイム環境などが私の見解の違いは、おそらくC#対C++とほぼ同じであるがあります - あなたは1つのウェルを知っていれば、その後、コアは概念はよく知られていますが、依然として根本的な違いがたくさんあります。
はあなたの最初のLispを勉強しながら、あなたは何を学ぶのこのlist of ways that Clojure is different from other Lisps
関数とマクロに「少しの」違いがあります。関数はファーストクラスです。マクロはありません。 – boucekv
90%があなたの次に持ち越されます参照してください。
Clojureの利用ラムダパラメータ(引数値)のようなベクターができますが、マクロdefunのとCommon Lispでは、このようになりますとラムダを書くことができます。 Clojureは、通常の関数呼び出しのように見える昏睡状態と名前を使用してJavaオブジェクトメソッドとフィールドにアクセスします。
(.toString 10) - メソッド10をtoStringメソッドに呼び出しますが、totoStringは関数ではありません。 .toStringの値をチェックしようとすると、.toStringがシンボルとして定義されていないという例外がスローされます。
また、昏睡の代わりに疑似クォーテーション(主にマクロで)で、Clojureはtyldaを使用します。
- 1. Lisp: 'nilとnilの間に違いはありますか?
- 2. Lisp/Clojureのプロシージャと# 'プロシージャの違いは何ですか?
- 3. codeigniter 1.7と最新のバージョンには大きな違いがありますか?
- 4. Rails 3と3.2には大きな違いがありますか?
- 5. Log4J 1.2とLog4J 2.0には大きな違いがありますか?
- 6. Clojureにはない普通のLispリーダマクロにはどのような利点がありますか?
- 7. MKSのチェックポイントとサブバージョンのタグの間に大きな違いがあります
- 8. 構文エラーのない行に構文エラーがあります
- 9. Emacs Clojureモードのタブインデントが巨大な場合があります
- 10. RubyとGroovyのブロック間に大きな違いはありますか?
- 11. 小文字のwindows.hと大文字のWindows.hの違いはありますか?
- 12. Sqlセルの文字長を制限すると、メモリとパフォーマンスに大きな違いはありますか?
- 13. ループマクロの "for"と "as"のキーワードに違いはありますか? Common Lispでは
- 14. Guava:Iterables.filter VS Collections2.filter、大きな違いはありますか?
- 15. WeakReference <object>とobject = nullに大きな違いはありますか?
- 16. LISPでvs let *を使うと効率に違いはありますか?
- 17. ECMA-262とECMA-357の構文に違いはありますか?
- 18. 理解できない `if`文に構文エラーがありますか?
- 19. 共通lispとemacs lispの構造の相違点
- 20. AngularjsとAngularjs 2の間にはどのような大きな違いがありますか?
- 21. Clojureには何がありますか?
- 22. C#で "get {}"、 "set {}"または "=>"の構文を使用するときに違いはありますか?
- 23. ソースコードlisp(Common Lisp、Scheme、Clojure)の美人
- 24. Lisp用の「ツリー構造エディタ」はありますか?
- 25. 一般的なlispイディオム - 良い方法がありますか?
- 26. どのプラットフォームでmemmoveとmemcpyのパフォーマンスに大きな違いがありますか?
- 27. .Net CLR用のかなり成熟したLisp/Scheme/Clojureコンパイラはありますか?
- 28. JSF非AJAX提出と「@all」AJAX提出の間に大きな技術的違いがありますか?
- 29. Clojureのパフォーマンス、大きなベクトルに対する大きなループ
- 30. Clojureのループで大きな値と小さな値を正しくバインドする方法はありますか?
これは間違っています。 Lispには多くの構文があります。トン。例として、DEFCLASS、DEFSTRUCT、LOOPなどの構文をCLで確認してください。下はs式の構文です - これも簡単なことではありません。 –
明瞭にするための小さな点、ライナー。彼は "Lisp家族"と言った。あなたが使用したすべての例はCommon Lispであり、あなたが与えた唯一の有効な例はLOOPであり、リスト以外の構文(キーワード)を混在させる唯一のものだと主張したいと思います。たとえそうであっても、すべての例をSchemeと対比してください。ほとんどすべてがDEFINEであり、あなたが言及した構造は存在しません。 – Shaun
@Shaun:Schemeには統語的なキーワードとマクロが組み込まれています。スキームレポートを参照してください。それは、LET、LAMBDA、IF、...で始まります.Lisp構文であるs式を混同しないでください。 Lisp構文はs式の上にあります。 Lispは一般に、関数呼び出しのための単純な形式を持っています。しかし、すべてのLispにはある種の特殊な構文形式とある種のマクロがあります。言語に既に存在するすべてのマクロは、SYNTAXを実装します。構文は言語の構造です。ユーザ定義のマクロは、すべてのLispでユーザが拡張可能な構文を持つ方法です。 '構文なし'のアイデアは、たびたび繰り返される神話です。反対の場合は真です。 –