srfi.259
- 型安全な手続きタグ ¶このSRFIは、SRFI-229 (srfi.229
- 手続きタグ参照)で導入された
タグ付き手続きの概念を拡張するものです。
SRFI-229では手続きに任意のオブジェクトをタグとして付加することができました。 それは非常に単純なメカニズムの上に興味深い機能を実装する可能性を開きましたが、 タグオブジェクトの型や使い方は完全にユーザ任せのため、 手続きタグを違う形で活用しているライブラリ同士の組み合わせが 困難になる場合があります。 例えば、別々のライブラリがともに同じ型(例:シンボル)をタグとして使っていたら? あるいは、既に他のライブラリがタグ付けしている手続きにさらにタグをつけたかったら?
このSRFIはその問題を解決するものです。 特定の手続きからだけ、タグ付けし、検査し、アクセスできるようにするユニークな 手続きタグ型を導入できるようにします。 異なる型の手続きタグ同士は干渉しません。
このSRFIの参照実装はSRFI-229の手続きタグの上に作られていたので、
ユーザがSRFI-229のprocedure-tag
を使って中身を覗くことができました。
Gaucheの実装では、このSRFIをGaucheのネイティブな機構の上に直接実装していて、
SRFI-229の手続きタグとは直交するものになっています。
[SRFI-259]{srfi.259
}
他の手続きタグ型と直交する、一意の手続きタグ型を作ります。
引数tagger、pred、accessorはそれぞれ識別子で、
新たな手続き型タグを使うための次のような手続きに束縛されます。
taggerは値と手続きを取り、元の手続きと同様に動作し、 かつ与えられた値をこの手続きタグ型の値として持つ手続きを返します。 与えられた手続きが既に他の型の手続きタグでタグ付けされていた場合、 返される手続きは両方の手続きタグを持ちます。
predは引数がこの手続きタグ型でタグづけされた手続きであれば#t
を、
そうでなければ#f
を返す述語に束縛されます。
accessorはこの手続きタグ型でタグづけされた手続きを取り、そのタグ型の 値を返します。引数がこの手続きタグ型でタグづけされた手続きでない場合は エラーが投げられます。
このマクロで作られる手続きタグ型は概念的には無名の型ですが、 デバッグの助けのために、Gaucheはtaggerを型名の一部に使います。