データのチャンクとルールのリストを入力として受け取り、一連の標準ルールとデータのチャンクへの入力として指定されたルールの両方を適用するプログラムがあります。両方の入力のサイズは異なる場合があります。
次のようなルールのリストを記述できるようにしたいと思います。
(rule-generating-macro
(rule-1-name rule-1-target
(rule-action-macro (progn actions more-actions)))
(rule-2-name rule-2-target
(rule-action-macro (or (action-2) (default-action))))
;; more rules
)
現在、ルールはより冗長です-それらはより似ています
(defvar rule-list
`((rule-1-name rule-1-target
,@(rule-action-macro (progn actions more-actions)))
(rule-2-name rule-2-target
,@(rule-action-macro (or (action-2) (default-action))))
;; more rules
)
後者の形式は私には見苦しいように見えますが、可変長&rest
引数を処理し、それを反復処理して、変換された構造を返すことができるマクロを作成する方法を理解できません。(うまくいけば例が示すように)私のプログラムが最初にそれを見るとき、そしてあなたが制御する必要があるときにリストを評価するのではなく、ルールのリストの評価を制御しようとしているので、 aのdefun
代わりに使用することは実際にはテーブルにありませんdefmacro
評価、あなたはdefmacro
領土にいます。この場合、厄介な点がそのrule-action-macro
一部です。インタプリタにそれを読み取らせ、その拡張された値を使用させることには問題がありました。
ルールリストを簡潔に記述できるように、可変長引数を処理するマクロを作成するにはどうすればよいですか?