s7 schemeにはdefine-expansionとゆう静的に展開するマクロがある。これを用いてC++のinline関数みたいなのを作ってみたのでご紹介。
(define-macro (define-inline decl . body)
(let ((bind (map (lambda (arg)
(list arg (list 'unquote arg)))
(cdr decl))))
`(define-expansion ,decl
,(list quasiquote `(let ,bind ,@body)))))
使い方は、
(define-inline (hoge a b)
(+ a a b))
こんな感じで普通の関数と同じように定義する。実際に速くなるのかはまだ検証してないw
いじょう