質問: Clojureの構文はScalaのものより本当に単純ですか? いつもClojureを支持して作られている議論はそれです。 構文はより単純であり、複雑な規則なしでコードを表現する方法は1つしかありません。 しかしScalaはClojureと比較してさまざまなタイプの構文と構成を持っています。 しかし、Clojureを学ぼうとしている間の最後の1週間から、私たちが作り込んだマクロのリストは無限大であることに気づきました。 では、Clojureの構文はどのような意味で単純なのでしょうか。 LISPersの場合はそうかもしれませんが、Scalaでさまざまな構成を学んでいるさまざまなバックグラウンドを持つ人々にとってはより簡単に思えます。 それでは、中立的な観点から、どの構文がより単純で読みやすいのでしょうか。
回答: > > 同じ括弧の構文で書いても > > > そしてそれは基本的にあなたの質問に対する答えです。 > > それぞれの仕組みを学ぶ必要があります。 > > > 一般的なマクロを使ってCommon Lispsの `loop` のようなそれほどうるさくない構文でDSLを導入することは可能ですが(私はこれから読者マクロを除外します)、それらは主に評価を制御するために使われます。通常のS式構文を使用してください。 1つの重要な特徴は、より複雑な `loop` マクロでさえ同じ古いsexprリーダーを使って読むことができるということです。 マクロとその入力形式について学ぶ必要があるのは事実ですが、Common Lispの `cond` では、入れ子になったものとClojureの `cond` の数を減らしています。入れ子の層、それはマクロだけでなく通常の関数にも当てはまります。引数として特定の構造体の引用符付きリストを取る通常の関数を想像してみてください - 関数がコードを変換するかどうかにかかわらず、期待される入力構造に従う必要があります。 新しい機能に遭遇するたびに、習得しなければならないAPIがいくつかあります。これは `function(arg1、arg2、...、argN)`構文のみを許可する言語にも当てはまります - あなたはまだ期待される引数が何であるか、どんな副作用が起こるのか、そして何を学ぶ必要があります与えられた関数の出力はです。 Scaleのような言語と比較してLisp構文のほうが簡単なのは、すべてがほぼ同じように表現されていることと、コード自体がこれらの表現とデータ構造を使用していることです同種性誰もが話している)。 LispまたはClojureパーサーを書き、次にScalaパーサーを書き込もうとした場合、構文上の複雑さにおけるこの違いはかなり明白になります。もっと複雑な文法 - 優先順位、空白、あいまいさ、より多くの例外などに関するより複雑な規則に対処する必要があります。