srfi.217
- 整数集合 ¶このsrfiは要素がfixnumに限定されたセットを定義します。
汎用のセットはscheme.set
で提供されています(scheme.set
- R7RSセット参照)が、
このモジュールは要素が限定されていることを利用してコンパクトにセットを保持します。
また、汎用のセットにはない、キーの範囲を使った操作も提供しています。
[SRFI-217]{srfi.217
}
element … を要素とする新たなisetを作って返します。
各elementはfixnumでなければなりません。
[SRFI-217]{srfi.217
}
手続的に要素を計算して整数集合を作ります。
pは現在の状態値を引数に取り、それが#t
を返せば繰り返しを終了します。
fは現在の状態値を引数に取り、集合に含めるべきfixnumを返します。
gは現在の状態値を引数に取り、次の状態値を返します。
seedは状態値の初期値を指定します。
(iset->list (iset-unfold (cut > <> 10) (cut * <> 2) (cut + <> 1) 0)) ⇒ (0 2 4 6 8 10 12 14 16 18 20)
[SRFI-217]{srfi.217
}
(numeric-range start end step)
で生成されるレンジ
に含まれるfixnumを要素とする整数集合を作って返します。
レンジについてはdata.range
- レンジを参照してください。
(iset->list (make-range-iset 0 5)) ⇒ (0 1 2 3 4)
[SRFI-217]{srfi.217
}
objが整数集合なら#t
を、そうでなければ#f
を返します。
[SRFI-217]{srfi.217
}
isetがelementを要素に持っていれば#t
を、
そうでなければ#f
を返します。
[SRFI-217]{srfi.217
}
isetが空なら#t
を、そうでなければ#f
を返します。
[SRFI-217]{srfi.217
}
引数はともに整数集合でなければなりません。
両方に共通する要素が無ければ#t
を、あれば#f
を返します。
[SRFI-217]{srfi.217
}
elementがisetの要素であればそれを、
でなければdefaultを返します。
[SRFI-217]{srfi.217
}
isetの最小または最大の要素を返します。
isetが空の場合は#f
を返します。
[SRFI-217]{srfi.217
}
isetの要素に、elt1 elt2 …を加えたものを要素として持つ
整数集合を返します。elt1 elt2 … にfixnum以外のものが
含まれていたらエラーが投げられます。
線形更新版iset-adjoin!
は結果を作るのにisetを再利用するかもしれません。
ただしそれは保証されていないので、呼び出し側は常に返り値を利用してください。
[SRFI-217]{srfi.217
}
isetの要素から、elt1 elt2 …を除いたものを含む
整数集合を返します。
線形更新版iset-delete!
は結果を作るのにisetを再利用するかもしれません。
ただしそれは保証されていないので、呼び出し側は常に返り値を利用してください。
[SRFI-217]{srfi.217
}
elt-list引数はfixnumのリストでなければなりません。
isetの要素から、elt-listに含まれるfixnumを取り除いたものを要素とする
整数集合を返します。
線形更新版iset-delete-all!
は結果を作るのにisetを再利用するかもしれません。
ただしそれは保証されていないので、呼び出し側は常に返り値を利用してください。
[SRFI-217]{srfi.217
}
二つの値を返します。isetの最小もしくは最大の要素と、
その要素を取り除いた整数集合です。isetが空の場合はエラーが投げられます。
線形更新版iset-delete-min!
/iset-delete-mac!
は結果を作るのに
isetを再利用するかもしれません。
ただしそれは保証されていないので、呼び出し側は常に返り値を利用してください。
[SRFI-217]{srfi.217
}
isetの要素のうちelementと一致するものを下から順に探します。
戻り値は二つで、一つ目は整数集合、二つ目は以下に説明する補助値です。
failureとsuccessはともに手続きです。
elementが見つかった場合、successが3つの引数で呼び出されます: マッチした要素、手続きupdate、そいて手続きremoveです。 success手続きはそのまま戻るか、updateかremoveのどちらかを 末尾呼び出しすることができます。
update手続きは二つの引数new-elementとobjを取ります。
呼ばれると、この手続きはisetの要素elementをnew-element
で置き換えた整数集合およびobjを戻り値として返します。
remove手続きは一つの引数objを取り、isetからelement
を除いた整数集合およびobjを戻り値として返します。
success手続きからこれらの手続きが末尾呼び出しされていれば、
この整数集合とobjがそのままiset-search
の戻り値となります。
elementが見つからなかった場合、failure手続きが二つの引数、 insertとignoreを伴って呼ばれます。これらはそれぞれが手続きで、 failureはどちらかを末尾呼び出ししなければなりません。
insert手続きはひとつの引数objを取り、 elementをisetに追加した整数集合とobjを戻り値とします。 ignore手続きはひとつの引数objを取り、 isetそのものとobjを戻り値とします。
線形更新版のiset-search!
では、結果の整数集合を作るために
isetが破壊的に変更されるかもしれません。
[SRFI-217]{srfi.217
}
isetの要素数を返します。
[SRFI-217]{srfi.217
}
isetの要素のうち、述語predを満たす最小の要素を返します。
もしpredを満たす要素が見つからなかったら、手続きfailureを引数無しで
呼び出しその結果を返します。
[SRFI-217]{srfi.217
}
isetの要素のうち、述語predを満たすものの個数を返します。
[SRFI-217]{srfi.217
}
isetの要素のうちpredを満たすものがひとつでもあれば#t
を、
そうでなければ#f
を返します。
[SRFI-217]{srfi.217
}
isetの要素が全てpredを満たしたら#t
を、そうでなければ#f
を
返します。
[SRFI-217]{srfi.217
}
isetの各要素にprocを適用し、その結果を集めたisetを作って返します。
procの戻り値がfixnumでなければエラーが投げられます。
procが単射でなければ、返される整数集合は元のisetより小さくなります。
procが適用される順序は不定です。
[SRFI-217]{srfi.217
}
procをisetの各要素に、要素の昇順に適用します。
procの結果は捨てられます。戻り値は指定されません。
[SRFI-217]{srfi.217
}
fold
/fold-right
と同じように、konsをisetの各要素と
直前のkonsの結果を引数にして呼び出してゆきます。最初のkonsの呼び出しには
knilが使われます。要素はそれぞれ昇順/降順に呼び出されます。
最後のkonsの結果が戻り値になります。
isetが空なら、konsは呼ばれずknilがそのまま返されます。
(iset-fold cons '() (iset 2 3 5 7 11)) ⇒ (11 7 5 3 2) (iset-fold-right cons '() (iset 2 3 5 7 11)) ⇒ (2 3 5 7 11)
[SRFI-217]{srfi.217
}
isetの要素のうち、述語predを満たすものだけを集めた整数集合を作って返します。
線形更新版iset-filter!
は結果を作るためにisetを再利用するかもしれません。
[SRFI-217]{srfi.217
}
isetの要素のうち、述語predを満たさないものだけを集めた整数集合を作って返します。
線形更新版iset-remove!
は結果を作るためにisetを再利用するかもしれません。
[SRFI-217]{srfi.217
}
ふたつの整数集合を返します。一つ目は、isetの要素のうち述語predを満たすもの、
二つ目は満たさないものを集めた集合です。
線形更新版iset-partition!
は結果を作るためにisetを再利用するかもしれません。
[SRFI-217]{srfi.217
}
isetのコピーを返します。
[SRFI-217]{srfi.217
}
isetの要素を昇順に並べたリストを返します。
[SRFI-217]{srfi.217
}
listはfixnumのリストでなければなりません。
それらを要素として持つ整数集合を作って返します。重複する要素はひとつにまとめられます。
[SRFI-217]{srfi.217
}
isetに、fixnumのリストlistを要素として足した整数集合を返します。
引数isetは結果を作るために破壊的に再利用されるかもしれません。
[SRFI-217]{srfi.217
}
与えられた整数集合すべてが同じ要素を含んでいれば#t
を、
そうでなければ#f
を返します。
[SRFI-217]{srfi.217
}
整数集合間の包含関係を比較します。
例えば(iset<=? iset1 iset2)
は、iset1の全ての要素がiset2に
含まれている場合(iset1がiset2の部分集合である場合)に#t
、
そうでなければ#f
となります。
[SRFI-217]{srfi.217
}
与えられた整数集合の和集合を返します。
iset-union
は関数的で、常に新たな整数集合を作って返します。
線形更新版のiset-union!
は、結果を作るためにiset1を破壊的に再利用する
かもしれません。
[SRFI-217]{srfi.217
}
与えられた整数集合全てに共通する要素を含む整数集合を返します。
iset-intersection
は関数的で、常に新たな整数集合を作って返します。
線形更新版のiset-intersection!
は、結果を作るためにiset1を破壊的に再利用する
かもしれません。
[SRFI-217]{srfi.217
}
iset1の要素のうち、iset2, iset3
…に含まれないものを
集めた整数集合を返します。
iset-difference
は関数的で、常に新たな整数集合を作って返します。
線形更新版のiset-difference!
は、結果を作るためにiset1を破壊的に再利用する
かもしれません。
[SRFI-217]{srfi.217
}
iset1とiset2のどちらか一方のみに含まれている要素を集めた整数集合を
返します。
iset-xor
は関数的で、常に新たな整数集合を作って返します。
線形更新版のiset-xor!
は、結果を作るためにiset1を破壊的に再利用する
かもしれません。
[SRFI-217]{srfi.217
}
isetの要素のうち、実数lowとhighで指定される区間内の
要素のみを含むisetを返します。下限low、上限highそれぞれを
区間に含むか含まないかで4種類のバリエーションがあります。
iset-open-interval
は共に含まず、
iset-close-interval
は共に含み、
iset-open-closed-interval
はlowを含まずhighは含み、
iset-closed-open-interval
はlowを含みhighは含みません。
(iset->list (iset-open-interval (iset 2 3 5 7 11) 2 7)) ⇒ (3 5) (iset->list (iset-closed-interval (iset 2 3 5 7 11) 2 7)) ⇒ (2 3 5 7) (iset->list (iset-open-closed-interval (iset 2 3 5 7 11) 2 7)) ⇒ (3 5 7) (iset->list (iset-closed-open-interval (iset 2 3 5 7 11) 2 7)) ⇒ (2 3 5)