R6RS:翻訳:R6RS:11.13 Vectors

R6RS:翻訳:R6RS:11.13 Vectors

11.13 ベクタ

ベクタはその要素が整数で添え字付けされる異要素から成る構造である。一般的には、ベクタは同一の長さのリストよりもより少ない空間を必要とし、無作為に選んだ要素にアクセスするのにリストよりも一般的に必要になる時間がより短かい。

ベクタの長さはその格納している要素の個数である。この数値は非負の整数であり、ベクタが作成されたときに固定される。ベクタの有効な添え字はベクタの長さよりも小さい正確な非負の整数オブジェクトである。ベクタの最初の要素は 0 で添え字づけされ、最後の要素はベクタの長さよりも 1 小さい数で添え字づけされる。

リスト定数と同様に、ベクタ定数は quote しなければならない。

’#(0 (2 2 2 2) "Anna")  
                ⇒  #(0 (2 2 2 2) "Anna")

[procedure] (vector? obj)

obj がベクタであれば #t を返す。そうでなければ #f を返す。

[procedure] (make-vector k)

[procedure] (make-vector k fill)

k 要素のベクタを新たに割り当てて返す。 2 番目の引き数が与えられた場合にはそれぞれの要素は fill に初期化される。それ以外の場合には各要素の最初の内容は未規定である。

[procedure] (vector obj ...)

与えられた引き数を要素として格納したベクタを新たに割り当てて返す。 list の類似形である。

(vector ’a ’b ’c)                       ⇒  #(a b c)

[procedure] (vector-length vector)

vector 中の要素数を正確な整数オブジェクトとして返す。

[procedure] (vector-ref vector k)

kvector の有効な添え字でなければならない。 vector-ref 手続きは vectork 番目の要素を返す。

(vector-ref ’#(1 1 2 3 5 8 13 21) 5)  
                ⇒  8

[procedure] (vector-set! vector k obj)

kvector の有効な添え字でなければならない。 vector-set! 手続きは objvectork 番目の要素に格納し、未規定値を返す。

変更不可能なベクタを vector-set! に渡した場合には &assertion コンディション型の例外が起こるべきである。

(let ((vec (vector 0 ’(2 2 2 2) "Anna")))
  (vector-set! vec 1 ’("Sue" "Sue"))
  vec)      
                ⇒  #(0 ("Sue" "Sue") "Anna")

(vector-set! ’#(0 1 2) 1 "doe")  
                ⇒  unspecified
             ; constant vector
             ; should raise  &assertion exception

[procedure] (vector->list vector)

[procedure] (list->vector list)

vector->list 手続きは vector に格納された要素のリストを新たに割り当てて返す。 list->vector 手続きはリスト list の要素に初期化されたベクタを新たに割り当てて返す。

(vector->list ’#(dah dah didah))  
                ⇒  (dah dah didah)
(list->vector ’(dididit dah))   
                ⇒  #(dididit dah)

[procedure] (vector-fill! vector fill)

vector の各要素に fill を格納し、未規定値を返す。

[procedure] (vector-map proc vector1 vector2 ...)

ベクタ群はすべて同じ長さでなければならない。 proc はベクタ群と同じ数だけの引き数を取り、値をひとつ返す。

vector-map 手続きはベクタ群の要素ごとに proc を適用して、その結果を順番にベクタに格納して返す。 proc は常に vector-map 自体と同一の動的環境で呼び出される。 proc がベクタの要素に適用される順序は既定されていない。 vector-map から複数回返った場合には、以前の呼び出しの戻り値は変更されてはならない。

map の類似形である。

実装系の義務: 先に述べたように proc を適用することにより実行される範囲にかぎり、 proc への制約を検しなければならない。実装系は proc を適用する前に、それが適切な引き数であるか確認してもよい。

[procedure] (vector-for-each proc vector1 vector2 ...)

ベクタ群の長さはすべて同じでなければならない。 proc はベクタ群と同じ個数だけの引き数を受け取る。 vector-far-each 手続きは proc を副作用目的で、要素指向に最初の要素から最後の要素にベクタの要素に適用する。 proc は常に vector-for-each 自体と同一の動的環境で呼び出される。 vector-for-each の戻り値は未規定である。

for-each の類似形である。

実装系の義務: 先に述べたように proc を適用することにより実行される範囲にかぎり、 proc への制約を検しなければならない。実装系は proc を適用する前に、それが適切な引き数であるか確認してもよい。


Last modified : 2008/03/31 10:52:37 UTC