CLでSRFI-99 — #:g1

Posted 2012-04-27 10:12:00 GMT

CLでSRFI、今回は、SRFI-99の「ERR5RS Records」です。
R6RSで、構造体が導入されましたが、本srfiは、srfi-9との互換性も考慮されていてR5RSでも使えるような提案です。

動作

(define-record-type foo
                    t
                    t
  a)

(define-record-type (bar foo) (mkbar a b) bar-p b (c))

(defvar *foo* (make-foo 8))

(foo? *foo*) ;=> T (defvar *bar* (mkbar 1 2))

(bar-p *bar*) ;=> T (foo? *bar*) ;=> T (bar-c *bar*) ;=> NIL (bar-c-set! *bar* 100)

(bar-c *bar*) ;=> 100

移植について

イントロスペクションの機能が色々あるので、これはCLOSで作るべきかなと思いましたが、適当にdefstructで作ってしまいました。 その所為で、make-rtdがまともに機能しません…。
無名structure-classから、structure-objectが生成できるような処理系なら簡単に作れるかもしれませんが、やはり、CLOSで作るべきだったか…。

comments powered by Disqus