12

私はClojureが初めてです。私は数ヶ月前に始めました。マクロを勉強しようとしています。

高階関数はラムダを取り、条件とフィルターに基づいて必要な回数のうちの1つを実行できるため、Clojureのマクロと高階関数の違いを理解するのに最初は混乱しました。

そのため、これに関する簡単な例を含む質問を StackOverflow 自体に投稿しました。回答で疑問が解消されました。

これで分かったのですが、

  • 本体を評価する関数とは異なり、マクロはすべての引数を評価しません。
  • マクロは、何を評価し、何を評価しないか、および引用、引用解除、スプライシング構文を使用してコードを別のコードに変換する方法を選択できます。
  • 次に、マクロから出力される最終的なコードが評価されます。

だから私の質問は、 C で使用されるプリプロセッサ ディレクティブやマクロとどう違うのですか? Lisp/Clojure マクロは、C マクロが完全に欠いており、広く使用されている開発者にどのような力を与えますか?

4

3 に答える 3

5

C マクロは、純粋にテキストを書き換えるマクロです。C プリプロセッサcpp(1)を任意のテキストで使用できます。したがって、C プリプロセッサを使用して C 以外のフォームを生成するのは簡単であり、C 自体に関する限り、かなり些細なことを行うには、多くの場合、フープをジャンプする必要があります。このため、 C マクロには落とし穴がたくさんあります。

Clojure マクロは、通常の Clojure 関数とは異なる一連のルールを使用して実行される Clojure コードです。評価された引数を受け取って結果を返す代わりに、評価されていないフォームを受け取ってフォームを返します。このフォームは、通常の実行中に最終的に評価される可能性があります。

于 2013-07-08T14:31:42.267 に答える