[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.12 ベクタ

Builtin Class: <vector>

ベクタはSchemeオブジェクトの単純な一次元配列です。 インデックスを用いて定数時間でその要素にアクセスできます。 一度作成されたベクタはその大きさを変えることはできません。

<vector>クラスはまた<sequence>クラスを継承し、 mapfoldなど様々な総称関数を使うことができます。 gauche.collection - コレクションフレームワークgauche.sequence - シーケンスフレームワーク を参照して下さい。

数値しか要素に持たないベクタを使う場合、SRFI-4の 単一型ベクタも使えるかもしれません (srfi-4 - 単一型のベクタ参照)。

より多くのベクタに対する操作がsrfi-43 - ベクタライブラリで提供されています。

Function: vector? obj

[R5RS] objがベクタなら#tを、そうでなければ#fを返します。

Function: make-vector k &optional fill

[R5RS] 長さkのベクタを作成して返します。 省略可能な引数fillが与えられていれば、ベクタの各要素はその値で 初期化されます。そうでなければベクタの各要素の値は不定です。

Function: vector obj …

[R5RS] 要素がobj …であるようなベクタを作成して返します。

Function: vector-length vector

[R5RS] ベクタvectorの長さを返します。

gauche.collectionモジュールをロードしていれば、 メソッドsize-ofも同じ目的で使えます。

Function: vector-ref vector k &optional fallback

[R5RS+] ベクタvectork番目の要素を返します。

vector-refkが負の値であったりベクタの長さより 大きかったりした場合はエラーを通知します。但し、省略可能な引数fallback が与えられている場合はその値が返されます。これはGaucheの拡張です。

gauche.sequenceモジュールをロードしていれば、 メソッドrefも同じ目的で使えます。

Function: vector-set! vector k obj

[R5RS] ベクタvectork番目の要素をobjに変更します。 kが負数であったりベクタの長さより大きい場合はエラーとなります。

gauche.sequenceモジュールをロードしていれば、 メソッドrefのsetterメソッドも使えます。

Function: vector->list vector &optional start end
Function: list->vector list &optional start end

[R5RS+][SRFI-43+] ベクタをリストに変換したり、その逆を行う手続きです。

省略可能な引数startendを与えることにより、 値を取り出す範囲を制限することができます。

 
(vector->list '#(1 2 3 4 5))     ⇒ (1 2 3 4 5)
(list->vector '(1 2 3 4 5))      ⇒ #(1 2 3 4 5)
(vector->list '#(1 2 3 4 5) 2 4) ⇒ (3 4)
(list->vector (circular-list 'a 'b 'c) 1 6)
  ⇒ #(b c a b c)

gauche.collectionモジュールをロードしていれば、 (coerce-to <list> vector)(coerce-to <vector> list) も同じ目的で使えます。

Function: vector-fill! vector fill &optional start end

[R5RS+][SRFI-43] ベクタvectorの全ての要素をfillに変更します。

省略可能な引数startendが与えられた場合、 start番目の要素からend-1番目の要素までのみに fillを格納します。startendの既定値は それぞれ0とvectorの大きさです。 start, end引数はGaucheの拡張です。

Function: vector-copy vector &optional start end fill

[SRFI-43] ベクタvectorをコピーします。引数startendを与えることで コピーされる範囲を制限することができます。 startendで指定される範囲が元のvectorの範囲を越えた 場合は、その部分がfillで埋められます。

 
(vector-copy '#(1 2 3 4 5))     ⇒ #(1 2 3 4 5)
(vector-copy '#(1 2 3 4 5) 2 4) ⇒ #(3 4)
(vector-copy '#(1 2 3 4 5) 3 7 #f) ⇒ #(4 5 #f #f)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.