6.34. kink/container/ORDER_SET

6.34.1. order_set型

order_setは、要素が全順序で順序付けられているような、setの部分型である。要素の同値関係は、全順序関係から導出される。

要素の全順序関係

要素の全順序関係up-toは、要素の定義域内のすべてのX, Y, Zについて、下記の条件を満たさなければならない。

• 反射律: X up-to X

• 推移律: if X up-to Y && Y up-to Z then X up-to Z

• 反対称律: if X up-to Y && Y up-to X then X equivalent-to Y

• 狭義の連結律: X up-to Y || Y up-to X

反対称律の条件は、要素の同値関係equivalent-toの定義でもある。

メソッド

order_set値は、setのメソッドすべてを持つ。setから継承されたメソッドのうち、次に挙げるものは、要素がup-toの順序で現れることを保証する。

• each

• all?

• any?

• count

• fold

• reduce

• have_all?

• have_any?

加えて、order_set値は下記のメソッドを持つ。

6.34.1.1. Set.order

orderは、Setの要素の全順序関係の関数を戻す。

結果の関数、$up_to?は、ふたつの引数X, Yを取る関数である。 `up_to?(X Y)` は、 `X up-to Y` のbool値を戻す。ここで `up-to` は、要素の全順序関係である。

6.34.1.2. Set.iter(...[Min])

iterメソッドは、Setの要素をSetの順番で持つiterを戻す。

Minが与えられている場合、結果のiterはMinより大きいか同値の要素だけを持つ。Minが与えられない場合、結果のiterはSetのすべての要素を持つ。

このメソッドは、set型のiterメソッドを拡張している。

事前条件

Minは、要素の全順序の定義域に属さなければならない。

:TREE_SET.require_from('kink/container/')

:Set <- TREE_SET.of('foo' 'bar' 'baz' 'qux')

Set.iter.each{(:E) stdout.print_line(E.repr) }
# Output:
#   "bar"
#   "baz"
#   "foo"
#   "qux"

Set.iter('baz').each{(:E) stdout.print_line(E.repr) }
# Output:
#   "baz"
#   "foo"
#   "qux"

Set.iter('bazzz').each{(:E) stdout.print_line(E.repr) }
# Output:
#   "foo"
#   "qux"

Set.iter('foo').each{(:E) stdout.print_line(E.repr) }
# Output:
#   "foo"
#   "qux"

Set.iter('foooo').each{(:E) stdout.print_line(E.repr) }
# Output:
#   "qux"

6.34.1.3. Set.front

frontは、Setの順序で最初に来る要素を戻す。

事前条件

Setは空であってはならない。

:TREE_SET.require_from('kink/container/')

:Set <- TREE_SET.of('foo' 'bar' 'baz')
stdout.print_line(Set.front.repr) # => "bar"

6.34.1.4. Set.back

backは、Setの順序で最後に来る要素を戻す。

事前条件

Setは空であってはならない。

:TREE_SET.require_from('kink/container/')

:Set <- TREE_SET.of('foo' 'bar' 'baz')
stdout.print_line(Set.back.repr) # => "foo"

6.34.1.5. Set.pop_front

pop_frontは、Setの順序で最初に来る要素をポップして戻す。

事前条件

Setは空であってはならない。

:FLAT_SET.require_from('kink/container/')

:Set <- FLAT_SET.of('foo' 'bar' 'baz')
:Front <- Set.pop_front
stdout.print_line(Front.repr) # => "bar"
stdout.print_line(Set.repr)   # => Flat_set("baz" "foo")

6.34.1.6. Set.pop_back

pop_backは、Setの順序で最後に来る要素をポップして戻す。

事前条件

Setは空であってはならない。

:FLAT_SET.require_from('kink/container/')

:Set <- FLAT_SET.of('foo' 'bar' 'baz')
:Back <- Set.pop_back
stdout.print_line(Back.repr)  # => "foo"
stdout.print_line(Set.repr)   # => Flat_set("bar" "baz")

6.34.2. ORDER_SET.is?(Val)

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

6.34.3. ORDER_SET.mixin

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

• eq

• each

• all?

• any?

• count

• fold

• reduce

• have_all?

• have_any?

• append

• op_eq / `==` 演算子