Let's start Scheme

2014-02-10

SRFI-4の紹介

(LISP Library 365参加エントリ)

SRFI-4はSchemeで整数データ、及び浮動小数点専用ベクタを扱うSRFIです。 用意されているデータ型としては、u8、s8、u16、s16、u32、s32、u64、s64、f32及びf64です。最後二つ以外は数値の整数ビット+符号を表し、f32とf64は浮動小数点数のビット数を表します。

それぞれのデータ型に対して以下の処理が定義されています。(SRFIに習ってデータ型をTAGと表示しています。)
  • (TAGvector? o)
  • (make-TAGvector n [ TAGvalue ])
  • (TAGvector TAGvalue ...)
  • (TAGvector-length TAGvect)
  • (TAGvector-ref TAGvect i)
  • (TAGvector-set! TAGvect i TAGvalue)
  • (TAGvector->list TAGvect)
  • (list->TAGvector TAGlist)
また、それぞれのデータ型に対してのリーダマクロも定義されています。

具体的な使用例を見てみましょう。動作確認処理系はSagittarius 0.5.0です。
#!read-macro=srfi/:4
(import (srfi :4))

(define s8 #s8(0 -1 2 -3 4))

(s8vector-ref s8 1)           ;; => -1
(s8vector-set! s8 0 5)        ;; => unspecified
(list->s8vector '(1 2 3 4 5)) ;; => #s8(1 2 3 4 5)
(s8vector->list s8)           ;; => #s8(5 -1 2 -3 4)
R6RS以降バイトベクタが基本データ型に入ったのでこのSRFIの存在意義が薄れた感はありますが、R5RSで書かれたスクリプト等に使われている場合があるので知っておいても損はないかと思います。

こんなSRFIないの?的なリクエストをお待ちしてます。(順番どおりにやると使用頻度低めのSRFIが続くのでw)

No comments:

Post a Comment