LISP マクロ パラメータでの構造化解除は便利なことだと理解しています。必須なのか気になります。例として、
(defmacro m1 (a) (car a))
と
(defmacro m2 ((a1 a2)) a1)
パラメータの正しい形式をチェックすることを除いて、(ほぼ)同等のようです。
私の推測では、分解するとコードの記述/理解が容易になりますが、それを使用するコードは、そうでないコードに変換される可能性があります。私は正しいですか、それとも愚かな初心者の間違いですか?
LISP マクロ パラメータでの構造化解除は便利なことだと理解しています。必須なのか気になります。例として、
(defmacro m1 (a) (car a))
と
(defmacro m2 ((a1 a2)) a1)
パラメータの正しい形式をチェックすることを除いて、(ほぼ)同等のようです。
私の推測では、分解するとコードの記述/理解が容易になりますが、それを使用するコードは、そうでないコードに変換される可能性があります。私は正しいですか、それとも愚かな初心者の間違いですか?
必須ではありません。マクロ呼び出しを Lisp システムによって分解するか、マクロ内でそのための独自のコードを書くことができます。
独自の構造化コードを作成する場合は、通常、それを &rest または &body パラメーター リストと組み合わせます。その一般的な理由の 1 つは、マクロ ラムダ リストの構文の可能性が、特定の目的に対して十分に柔軟でないことです。その例は、Common Lisp LOOP マクロです。
マクロ ラムダ リストを使用するのは良いスタイルです。パラメータといくつかの構造情報を含むインターフェイスを提供します。これにより、Lisp システムは、マクロ呼び出しの構文エラー チェックの単純な形式を提供することもできます。手で書かなければならない何か。