6.35. kink/container/SET

6.35.1. set型

setは、複数の一意な要素を格納するコンテナの抽象型である。

setの要素は、要素の同値関係において一意でなければならない。

要素の同値関係

要素の同値関係equivalent-toは、要素の定義域内のすべてのX, Y, Zについて、次の条件を満たさなければならない。

• 反射律: X equivalent-to X

• 対称律: (if X equivalent-to Y then Y equivalent-to X) and (if not (X equivalent-to Y) then not (Y equivalent-to X))

• 推移律: if X equivalent-to Y and Y equivalent-to Z then X equivalent-to Z

6.35.1.1. Set.eq

eqは、Setの要素の同値関係の関数を戻す。

結果の関数、$equivalent_to?は、ふたつの引数XとYを取る関数である。 `equivalent_to?(X Y)` は、 `X equivalent-to Y` のbool値を戻す。ここで `equivalent-to` は、Setの要素の同値関係である。

6.35.1.2. Set.have?(Elem)

have?は、SetがElemと同値の要素を持っているかどうかを戻す。

事前条件

Elemは、要素の同値関係の定義域に属さなければならない。

例

6.35.1.3. Set.size

sizeは、Setの要素の数を整数のnum値として戻す。

例

6.35.1.4. Set.push(Elem)

pushはElemをSetに挿入する。

SetがすでにElemと同値の要素を持っている場合、pushは何もしないかもしれないし、要素をElemで置き換えるかもしれない。

事前条件

Elemは、要素の同値関係の定義域に属さなければならない。

例

6.35.1.5. Set.append(Eacher)

appendはEacherの要素をSetに挿入する。

事前条件

Eacherは、.each($consume)メソッドを提供しなければならない。eachメソッドは、Eacherのそれぞれの要素について$consumeを呼ぶものでなければならない。

Eacherの要素は、Setの要素の定義域に含まれなければならない。

例

6.35.1.6. Set.remove(Elem)

removeは、Elemと同値の要素を消す。Setがそのような要素を持っていない場合、removeは何もしない。

事前条件

Elemは、要素の同値関係の定義域に属さなければならない。

例

6.35.1.7. Set.clear

clearはすべての要素を消す。

例

6.35.1.8. Set.iter

iterメソッドは、Setの要素を含むiterを戻す。

例

6.35.1.9. Set.each($consume)

eachは、Setのそれぞれの要素について$consumeを呼び出す。

事前条件

$consumeは、引数ひとつを取る関数でなければならない。

例

6.35.1.10. Set.all?($match?)

all?は、Setのすべての要素が述語$match?を満たすかどうかを戻す。

事前条件

$match?は述語でなければならない。

例

6.35.1.11. Set.any?(...[$match?={ true }])

any?はSetの1個以上の要素が述語$match?を満たすかどうかを戻す。

$match?はオプショナルな引数で、デフォルト値は{ true }である。したがって、$match?が渡されない場合、any?はSetが空でないかどうかを戻す。

事前条件

$match?は述語でなければならない。

例

例

6.35.1.12. Set.count($counted?)

countは、Setの要素のうちで述語$counted?を満たすものの数を、整数のnum値として戻す。

事前条件

$counted?は述語でなければならない。

例

6.35.1.13. Set.fold(Init $combine)

foldは、Setの要素をInitを種として畳み込む。

Setが要素E1, E2, E3, ,,, En_1, Enを持つとき、reduceはcombine(combine(,,,combine(combine(E1 E2) E3),,, En_1) En)を戻す。Setが順序付けられていない限り、要素がどんな順番で現れるか決まりはない。

Setが空の場合、foldはInitを戻す。

事前条件

$combineはふたつの値を取る関数でなければならない。

例

6.35.1.14. Set.reduce($combine ...[$empty_fallback])

reduceは、Setの要素を相互に畳み込む。

Setの要素がE1, E2, E3, ,,, En_1, Enのとき、reduceはcombine(combine(,,,combine(combine(E1 E2) E3),,, En_1) En)を戻す。Setが順序付けられていない限り、要素がどんな順番で現れるか決まりはない。

Setの要素が単一のEのとき、reduceはEを戻す。

Setが空で、$empty_fallbackが与えられている場合、reduceは$empty_fallbackを引数なしで末尾呼び出しする。

Setが空で、$empty_fallbackが与えられていない場合、reduceは例外を投げる。

事前条件

$combineはふたつの値を取る関数でなければならない。

$empty_fallbackはサンクでなければならない。

例

6.35.1.15. Set.have_all?(Vals)

have_all?は、Valsのすべての要素をSetが持っているかどうかを戻す。

事前条件

Valsは.all?($match?)メソッドを実装していなければならない。

Valsの要素は、Setの要素の同値関係の定義域に属さなければならない。

例

6.35.1.16. Set.have_any?(Vals)

have_any?は、Valsのいずれかの要素をSetが持っているかどうかを戻す。

事前条件

Valsは.any?($match?)メソッドを実装していなければならない。

Valsの要素は、Setの要素の同値関係の定義域に属さなければならない。

例

6.35.1.17. Set1 == Set2

== 演算子、つまりop_eqメソッドは、Set1がSet2とおなじ要素のコレクションを持っているかどうかを戻す。

言い換えると、op_eqは、Set1がSet2のすべての要素を持っていて、かつSet2がSet1のすべての要素を持っているかどうかを戻す。

事前条件

Set2はsetでなければならない。

Set1とSet2の要素の同値関係は同じでなければならない。

例

6.35.2. SET.is?(Val)

is?は、Valがsetであるかどうかを戻す。

6.35.3. SET.mixin

mixinは、 次にあげるsetのメソッドのデフォルトの実装を提供するミックスイントレイトを戻す。

• each

• all?

• any?

• count

• fold

• reduce

• have_all?

• have_any?

• append

• op_eq / `==` 演算子