Makoto Satoh
makot****@yahoo*****
2005年 4月 22日 (金) 11:26:21 JST
佐藤です。 GDバインディングを作ってます。 基本的なC APIへのバインディングは作成しましたが、Schemeから直接 それらを使うのはどうもあまりきれいではないので、clispにあるCL-GD のAPIを参考にSchemeラッパーを書こうとしています。 GDではイメージオブジェクトを作った後にそれを破棄する必要がありますが、 CL-GDにはwith-imageというマクロがあってイメージオブジェクトの生成、 破棄をやってくれます。このマクロを移植したいと思っています。 このマクロは以下のようなコードです。 (defmacro with-image ((name width height &optional true-color) &body body) (rebinding (width height true-color) `(with-safe-alloc (,name (create-image ,width ,height ,true-color) (destroy-image ,name)) , @ body))) この「&body body」の前に「&optional true-color」がありますが、Gaucheでは そのままでは書けませんよね? こういう場合、 (define-macro (with-image name width height true-color . body) として使う人がtrue-colorに#t/#fを指示させるようにするか、 (define-macro (with-image name width height . body) (define-macro (with-image-true-color name width height . body) と2つ用意するかなど、どうするのがGauche的には良いでしょうか? あるいは、引数リストに「. body」を含めたい場合に&optionalや &keywordと共存できるのでしょうか? あるいは、define-syntaxのほうでパターンを2つ書く感じでしょうか? よろしくご指導ください。