私はラケットマクロに潜入し始めました。簡潔なマクロ定義マクロを作成しようとしています。構文規則で使用するためにラケットマクロ - ペアを作成
(define-syntax id
(syntax-rules()
((id param) replacement1)
((id params ...) replacement2)))
だから、元の式のCDDRは、表現のペアになっている(このような何かに
(macro id
(param) replacement1
(params ...) replacement2)
:私はこのような表現を拡張したいと思いますid)は、これらのペアのそれぞれの車に挿入されます。
構文規則によって提供されるパターンマッチングのみを使用すると再帰的に考えるのが難しいです(通常のリストのように表現を操作したい)。どのようなパターンを使うべきですか?あるいは、どういうふうにそれを通常のリストとして操作して、展開で使用するために結果を引用符で囲まないのですか?
感謝
編集 - 暫定的な解決策、Taymonの答え
によって知らさここに私の好奇心の一部は、それらのペアリング括弧を取り除くことについてでした。私は構文を調べましたが、ちょっと混乱してしまったので、純粋にパターンマッチングのサブ言語でそれをやろうとしました。私は「pairize」与えられたテンプレート(それはアキュムレータ関数のように一種の働き)に別のマクロと組み合わせTaymonのマクロを使用して終了:
(define-syntax-rule (macro-aux id ((param ...) expr) ...)
(define-syntax id
(syntax-rules()
((id param ...) expr)
...)))
(define-syntax pairize
(syntax-rules()
((pairize id (pairs ...) p b) (macro-aux id pairs ... (p b)))
((pairize id (pairs ...) p b rest ...) (pairize id (pairs ... (p b)) rest ...))))
(define-syntax macro
(syntax-rules()
((macro id tpl-expr ...) (pairize id() tpl-expr ...))))
ありがとう!私はあなたの例が見えるまでパターンで働くエリプスがどのように働いていたのかを十分に認識しておらず、暫定的な解決策であなたのルールを使用しました。 – twf