For Development HEAD DRAFTSearch (procedure/syntax/module):

5.8 マクロユーティリティ

Macro: syntax-error msg arg …
Macro: syntax-errorf fmt arg …

これらはerrorerrorf (例外の通知参照) と ほぼ同じですが、実行時ではなくマクロ展開時(すなわち、コンパイル時)に エラーを通知するところが異なります。

これらの手続きは、マクロの誤った使い方を、 マクロ展開ルーチンの出す複雑なエラーではなく、 分かりやすい方法でユーザーに通知するのに使えます。 そのため、arg …はunwrap-syntaxに渡されて 内部の構文的束縛情報を取り除いた後でこれらの手続きに渡されます (識別子参照)。

(define-syntax my-macro
  (syntax-rules ()
    ((_ a b)   (foo2 a b))
    ((_ a b c) (foo3 a b c))
    ((_ . ?)
     (syntax-error "malformed my-macro" (my-macro . ?)))))

(my-macro 1 2 3 4)
  ⇒ error: "malformed my-macro: (my-macro 1 2 3 4)"


For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT