4.33. kink/container/ORDERED_SET

4.33.1. type ordered_set

`ordered_set` is a subtype of `set` type which supports ordering of elements.

The ordering is defined by each `ordered_set` implementation.

See kink/container/SET for `set` type.

The following builtin mods provide ordered_set implementations:

• kink/container/FLAT_SET

• kink/container/TREE_SET

4.33.1.1. S.each($consume_elem)

`each` calls $consume_elem with each element of the the set, in the ordering of the set.

This method suffices the contract of Set.each.

4.33.1.2. S.iter

`iter` returns an iter which iterates over all the elements in the ordering of the set.

This method suffices the contract of Set.iter.

4.33.1.3. S.fold(Init $combine)

`fold` accumulates elements of the set seeded by `Init`.

If the elements of the set is `E1`, `E2`, ,,, `En_1`, `En`, in the ordering of the set, this fun returns combine(combine(,,,combine(combine(Init E1) E2),,, En_1) En).

This method suffices the contract of Set.fold.

4.33.1.4. S.reduce($combine)

`reduce` accumulates elements of the set mutually, then returns a maybe tuple.

If the set has elements `E1`, `E2`, `E3`, ,,, `En_1`, `En`, in the ordering of the set, this method returns [combine(combine(,,,combine(combine(E1 E2) E3),,, En_1) En)].

If the set has a single element `E`, this method returns [E].

If the set is empty, this method returns [].

This method suffices the contract of Set.reduce.

4.33.1.5. S.front

`front` returns the element which comes first in the ordering of the set.

Precondition:

• The set must not be empty

Example:

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

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

4.33.1.6. S.back

`back` returns the element which comes last in the ordering of the set.

Precondition:

• The set must not be empty

Example:

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

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

4.33.1.7. S.pop_front

`pop` pops the element which comes first in the ordering of the set.

Precondition:

• The set must not be empty.

Example:

: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")

4.33.1.8. S.pop_back

`pop_back` pops the element which comes last in the ordering of the set.

Precondition:

• The set must not be empty.

Example:

: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")

4.33.1.9. S.iter_from(Min)

`iter_from` returns an iter which iterates over elements equivalent to or bigger than `Min` in the ordering of the set.

Precondition:

• Ordering between `Min` and elements of the set must be able to be tested.

Example:

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

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

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

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

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

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

4.33.2. ORDERED_SET.is?(Val)

`is?` returns whether `Val` is an ordered_set.