CLでSRFI-0 — #:g1

Posted 2011-06-04 11:29:00 GMT

SchemeのRequest For Implementationに意味なくCLで応えている日々ですが、今回は、SRFI-0 フィーチャーベースの条件展開 です。
CLerにはお馴染みの、#+foo #-barという、リードマクロですが、これのScheme版というところです。
CLでは、リード時に作用しますが、SRFI-0では、マクロ展開時に作用します。
- srfi-0.
- (http://srfi.schemers.org/srfi-0/srfi-0.html)

(use-package :srfi-0)

(progn (cond-expand (:sbcl (print 'sbcl?))) #+sbcl (print 'sbcl!) nil) ;-> ; SBCL? ; SBCL! ;=> NIL

移植について

CLに移植するにあたり*features*の機能が活かされないのももったいないので*features*内容も参照するようにしてみました。
SRFI-0の参照実装では、パターンマッチのマクロ内で完結するように組まれていてフィーチャーの追加がなんとなく面倒そうに見えたのですが(マクロ内にずらーっと並べて書くんだろうかとか)、Gaucheでは、実行時にフィーチャーが追加できるようにするため伝統マクロで実装されていました。なるほど。

comments powered by Disqus