srfi.43
- ベクタライブラリ(旧式) ¶このモジュールは実効的に、R7RSとSRFI-133に取って代わられています。 いくつかの手続きはR7RSやSRFI-133の同名の手続きとは非互換で、 このモジュールはSRFI-43に依存している既存のコードのためだけに 残されています。
「現代的な」ベクタライブラリは、ベクタとscheme.vector
- R7RSベクタ
で説明されています。新たなコードはそちらを使うべきです。
以下のSRFI-43の手続きは組み込みになっています。 説明はベクタを参照してください。
make-vector vector vector? vector-ref vector-set! vector-length vector-fill! vector-copy vector-copy! vector-append vector->list list->vector reverse-list->vector
以下のSRFI-43の手続きはSRFI-133でも同様にサポートされています。
説明はscheme.vector
- R7RSベクタを参照してください。
vector-unfold vector-unfold-right vector-reverse-copy vector-reverse-copy! vector-concatenate vector-empty? vector= vector-index vector-index-right vector-skip vector-skip-right vector-binary-search vector-any vector-every vector-swap! reverse-vector->list
ここでは上に挙げられていない手続きを説明します。
[SRFI-43]{srfi.43
}
SRFI-133のvector-fold
とvector-fold-right
と似ていますが、
kons手続きは追加で、現在のインデックスを第一引数として取ります。
従って、nを引数で与えられたベクタの数とすると、
konsはn+2個の引数を取らなければなりません。
konsは(kons <index> <cumulated-value> <elt1> <elt2> ...)
のように呼ばれます。
Gaucheにはfold-with-index
があって、ベクタをインデックスつきで
foldするのに使えます(シーケンス上のマップ)が、
konsが受け取る引数の順序が違います: インデックスの次に
各ベクタの要素、そして最後に累積された値が来ます。
(use srfi.43) (vector-fold list '() '#(a b c) '#(d e f)) ⇒ (2 (1 (0 () a d) b e) c f) (use gauche.sequence) (fold-with-index list '() '#(a b c) '#(d e f)) ⇒ (2 c f (1 b e (0 a d ())))
[SRFI-43]{srfi.43
}
R7RSのvector-map
およびvector-for-each
、
そしてsrfi-133
のvector-map!
およびvector-cout
と
ほぼ同じですが、fが現在のインデックスを最初の引数として(他の引数より前に)
取ります。
GaucheはSRFI-43のvector-map
、vector-map!
、
vector-for-each
互換な手続きをそれぞれ
vector-map-with-index
、
vector-map-with-index!
、vector-for-each-with-index
という
名前で提供しています。ベクタ参照。
(vector-map list '#(a b c)) ⇒ #((0 a) (1 b) (2 c)) (vector-map list '#(a b c) '#(d e f g)) ⇒ #((0 a d) (1 b e) (2 c f)) (vector-count = '#(0 2 2 4 4)) ⇒ 3
(註: vector-count
は=
を二つの引数、現在のインデックスと
ベクタの要素で呼び出します。従ってこの例は、ベクタの要素がインデックスと一致する
場合を数えています。)
gauche.collection
のジェネリックなmap
やfor-each
は
ベクタに対しても使えますが、マップされる手続きはインデックスを取らず、
また結果はリストになります。
(vector-map f vec1 vec2 …)
は機能的には
(map-to-with-index <vector> f vec1 vec2 …)
と同じになります。
詳しくはgauche.collection
- コレクションフレームワークとgauche.sequence
- シーケンスフレームワークを参照してください。