Next: data.ring-buffer
- リングバッファ, Previous: data.random
- ランダムデータの生成, Up: ライブラリモジュール - ユーティリティ [Contents][Index]
data.range
- レンジレンジオブジェクトはO(1)で要素にアクセスでき、
そして各要素が手続き的に計算されるような不変なシーケンスです。
例えば、0からNまでの整数のレンジ、というのは、i番目の要素を計算する手続きが
identity
であるようなレンジとして簡単に実現できるでしょう。
これは、全ての整数を持つシーケンスを作るよりずっと軽いです。
レンジはまた、一部分だけ取り出したレンジを作ったり、 レンジ同士をつなげたりする操作を効率的に行えます。
レンジオブジェクトはSRFI-42 先行評価的内包表記の:range
qualifierに
渡すこともできます (srfi.42
- 先行評価的内包表記参照)。
ポータブルなレンジオブジェクトのインタフェースはsrfi.196
で
規定されています。Gaucheではレンジオブジェクトを<sequence>
として
実装し、シーケンスプロトコルも使えるようにしています
(gauche.sequence
- シーケンスフレームワーク参照)。またこのモジュールではsrfi.196
にない
手続きも提供されます。
レンジオブジェクトのクラスです。内部的には、異なるレンジの性質に合わせて
いくつかのサブクラスを使っていますが、外部的には全てのレンジを
<range>
クラスのインスタンスとして扱って構いません。
<range>
クラスのメタクラスです。
[SRFI-196]{data.range}
長さがlengthで、i番目の要素(0 <= i
< length))
が(indexer i)
で計算されるようなレンジを作って返します。
手続きindexerはO(1)の時間オーダーで動作し、参照透過でなければなりません。 実装によっては、内部で要素の値をフラットベクタにキャッシュすることもありえます。
(range->list (range 5 (^i (+ i 10)))) ⇒ (10 11 12 13 14)
[SRFI-196]{data.range} Creates and returns a range of integers starting from start (inclusive) and ending below end (exclusive), increasing with step. The default value of step is 1.
(range->list (numeric-range 2 6)) ⇒ (2 3 4 5) (range->list (numeric-range 0 5 2/3)) ⇒ (0 2/3 4/3 2 8/3 10/3 4 14/3)
[SRFI-196]{data.range} Creates and returns a range of integers. Total length of the range is length. The range starts from start (default 0), and increased with step (default 1).
(range->list (iota-range 5)) ⇒ (0 1 2 3 4) (range->list (iota-range 7 1 -1/7)) ⇒ (1 6/7 5/7 4/7 3/7 2/7 1/7)
[SRFI-196+]{data.range} Returns a range over the given vector vec. The vector is kept in the range, so you shouldn’t mutate vec.
The optional start and end arguments limits the range of the vector to be used. They are Gauche’s extension and not in SRFI-196.
(range->list (vector-range '#(a b c))) ⇒ (a b c) (range->list (vector-range '#(a b c d e) 1 4)) ⇒ (b c d)
{data.range} Returns a range over the given uniform vector uvec. The uniform vector is kept in the range, so you shouldn’t mutate uvec.
The optional start and end arguments limits the range of the uniorm vector to be used.
{data.range}
Returns a range over the given bitvector bvec.
Bitvector/bool-range
regards bvec as a boolean vector,
while bitvector/int-range
regards it as a vector of 0 and 1.
See ビットベクタ, for the details of bitvectors.
Note that bvec is kept in the range, so you shouldn’t mutate uvec.
The optional start and end arguments limits the range of the uniorm vector to be used.
[SRFI-196]{data.range} Returns a range over each character in the given string str. The string is kept in the range, so you shouldn’t mutate str.
The optional start and end arguments limits the range of the vector to be used. They are Gauche’s extension and not in SRFI-196.
(range->list (string-range "abc")) ⇒ (#\a #\b #\c) (range->list (string-range "abcde" 1 4)) ⇒ (#\b #\c #\d)
[SRFI-196]{data.range} Returns a new range that walks over concatenation of the given ranges.
[SRFI-196+]{data.range} Returns a new range that walks over the elements of range, but in reverse order.
The optional start and end arguments limits the range of the vector to be used. They are Gauche’s extension and not in SRFI-196.
(range->list (range-reverse (string-range "abc"))) ⇒ (#\c #\b #\a) (range->list (range-reverse (string-range "abcdef" 1 4))) ⇒ (#\d #\c #\b)
[SRFI-196]{data.range} Returns true iff obj is a range.
[SRFI-196]{data.range}
Returns true iff all ranges have the same length, and any pair
of corresponding elements in the given ranges are equal in terms of
elt=
predicate.
As edge cases, when zero or one range is given, #t
is returned.
(range=? eqv? (numeric-range 0 5) (iota-range 5) (vector-range '#(0 1 2 3 4))) ⇒ #t
[SRFI-196]{data.range} Returns the length of range.
[SRFI-196+]{data.range} Returns the i-th element of range. The index i must be an exact integer.
If i is negative, or greater than or equal to the length of range, fallback is returned if given, or an error is signaled. The fallback argument is Gauche’s extension and not in SRFI-196.
[SRFI-196+]{data.range} Returns the first element of range.
If the range is empty, fallback is returned if given, or an error is signaled. The fallback argument is Gauche’s extension and not in SRFI-196.
[SRFI-196+]{data.range} Returns the last element of range.
If the range is empty, fallback is returned if given, or an error is signaled. The fallback argument is Gauche’s extension and not in SRFI-196.
[SRFI-196]{data.range} Returns two ranges, the first one with elements before k-th elements of range, and the second one with k-th elements and after of range.
[SRFI-196]{data.range} Returns a new range that contains start-th (inclusive) to end-th (exclusive) elements of range.
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
[SRFI-196]{data.range}
Next: data.ring-buffer
- リングバッファ, Previous: data.random
- ランダムデータの生成, Up: ライブラリモジュール - ユーティリティ [Contents][Index]