R6RS:翻訳:Standard Libraries:12.9 Syntax violations
12.9 構文違反
[procedure] (syntax-violation who message form)
[procedure] (syntax-violation who message form subform)
who は #f ないしは文字列ないしはシンボルである。message は文字列である。 form は構文オブジェクトないしはデータ値である。 subform は構文オブジェクトないしはデータ値である。 syntax-violation 手続きは例外を通知し、構文違反を報告する。 who は例外を検出したマクロ変換子の説明である。 message 引き数はその違反の内容についての説明である。 form はエラーを起こした構文オブジェクトないしはフォームを表すデータ値である。省略可能な subform は構文オブジェクトないしはフォームを表すデータ値で、より精確な違反の場所を示すものである。
who が #f である場合、syntax-violation 手続きは、コンディションオブジェクトに適切な値を推測しようとする。 form が識別子、ないしはリスト構造の構文オブジェクトであり、その最初の要素が識別子である場合、推測される値は識別子のシンボルである。さもなくは、コンディションオブジェクトの一部として who の値は提供されない。
ここで通知された例外(R6RS:翻訳:Standard Libraries:7 Exceptions and conditions参照)とともに与えられたコンディションオブジェクトは以下のコンディション型を持つ。
- who が #f でないか推測可能であった場合、コンディションは &who 型のコンディションを持つ。 &who は当該フィールドの値となる。この場合、 who により、例外を検出した手続きないし実体が同定される。 who が #f であった場合には &who 型のコンディションを持たない。
- コンディションは &message 型のコンディションを持ち、message を当該フィールドの値として持つ。
- コンディションは &syntax 型のコンディションを持ち、 form と subform を当該フィールドの値として持つ。 subform が与えられなかった場合、 subform フィールドの値は #f になる。