2

LISP マクロ パラメータでの構造化解除は便利なことだと理解しています。必須なのか気になります。例として、

(defmacro m1 (a) (car a))

(defmacro m2 ((a1 a2)) a1)

パラメータの正しい形式をチェックすることを除いて、(ほぼ)同等のようです。

私の推測では、分解するとコードの記述/理解が容易になりますが、それを使用するコードは、そうでないコードに変換される可能性があります。私は正しいですか、それとも愚かな初心者の間違いですか?

4

1 に答える 1

4

必須ではありません。マクロ呼び出しを Lisp システムによって分解するか、マクロ内でそのための独自のコードを書くことができます。

独自の構造化コードを作成する場合は、通常、それを &rest または &body パラメーター リストと組み合わせます。その一般的な理由の 1 つは、マクロ ラムダ リストの構文の可能性が、特定の目的に対して十分に柔軟でないことです。その例は、Common Lisp LOOP マクロです。

マクロ ラムダ リストを使用するのは良いスタイルです。パラメータといくつかの構造情報を含むインターフェイスを提供します。これにより、Lisp システムは、マクロ呼び出しの構文エラー チェックの単純な形式を提供することもできます。手で書かなければならない何か。

于 2012-02-01T05:25:55.787 に答える