[Gauche-devel-jp] CommonLisp の defmacro の &body 相当について

Zurück zum Archiv-Index

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つ書く感じでしょうか?

よろしくご指導ください。



Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index