CLでSRFI-4 — #:g1

Posted 2011-06-17 13:31:00 GMT

必死に願掛けSRFI実装をしていますが、今回は、SRFI-4 一様数値ベクタ型 です。
通常のベクターは要素の型として任意のオブジェクトが取れるのですが、同じ型の数値しか入らないことが予め分かっていたりする場合には、それにフィットした効率の良いベクタを使いたい、というのが、このSRFIの目的のようです。
- srfi-4.
- SRFI 4: Homogeneous numeric vector datatypes

動作

(u8vector 0)
;=> #U8(0)

#u64(0) ;=> #u64(0)

(make-s8vector 8) ;=> #S8(0 0 0 0 0 0 0 0)

(u8vector? #u8(1 2 3)) ;=> T

移植について

#u8(0)等の読み込みには、リーダーマクロを定義することになりますが、#sが構造体で使われているので競合を回避。
また、#U(0 0 0 0 ...)のような表示をするには、プリンタも変更する必要があります。残念ながらprint-objectで定義可能な部分ではないようなので処理系の関数を上書きすることになります。
CLだと、#u16(0 0 0)もu8(0 0 0)も#(0 0 0)と表示されるので区別がつかないんですねー。もちろんオブジェクトはちゃんと型どおりではあるのですが。

comments powered by Disqus