---
# System prepended metadata

title: section2
tags: [macro]

---

---

title: section2
tags: macro

---

### 2 私たちの進攻計画

品質の高いマクロを作るためには、syntax-parse と呼ばれるマクロシステムを使うことになります。これについてはすぐに説明しますので、ご安心ください。

しかし、そこから始めると、概念や用語に圧倒されて、とても混乱してしまうでしょう。私はそうでした。

1. その代わり、基本的なことから始めましょう。構文オブジェクトと、それを変更するための関数、つまり「トランスフォーマ」です。しばらくはこのレベルで作業を行い、マクロビジネス全体を神話化しないようにします。

2. すぐに、パターンマッチを使えばもっと楽になることに気づくでしょう。syntax-caseとその短縮形であるdefine-syntax-ruleについて学びます。パターン変数をテンプレートに戻す前に圧縮したい場合、混乱する可能性があることを発見し、その方法を学びます。

3. この時点で、私たちは多くの便利なマクロを書くことができるでしょう。しかし、「魔法の変数」を使って、人気のある擬人化されたifを書きたい場合はどうしたらいいでしょうか？私たちは、ある種のミスをしないように保護されていることがわかりました。このようなことを意図的に行いたいときには、シンタックスパラメータを使います。[他にも古い方法があります。他にも古い方法がありますが、それらは見ません。また、「衛生」を提唱することに多くの時間を割くことはありません-それが良いことだと規定するだけです。]

4. 最後に、マクロが誤って使用された場合に、マクロがより賢くなる可能性があることに気付きます。通常の Racket 関数は、オプションで契約と型を持つことができます。これらは使い方の間違いをキャッチし、明確で有用なエラーメッセージを提供します。マクロにも同じようなものがあったらいいですよね。あります。最近の Racket マクロの拡張機能の 1 つに syntax-parse があります。

* [next section(3 変形!)](https://hackmd.io/xLxLlckORtSxKWclYNtJ0Q?view)

* [previous section(1 はじめに)](https://hackmd.io/rRfacGHSTWKOLiErxhY-fw?view)