6.18. kink/ORDER

<= 演算子、つまりop_leメソッドにもとづく全順序関係に関する機能。

<= 演算子

<= 演算子の実装は、オペランドの定義域の中のすべてのX, Y, Zについて、次を満たす全順序関係でなければならない。

• 反射律: X <= X

• 推移律: if X <= Y && Y <= Z then X <= Z

• 反対称律: if X <= Y && Y <= X then X == Y

• 狭義の連結律: X <= Y || Y <= X

6.18.1. ORDER.by($extract_key)

byは、ふたつの引数を抽出されたキーで順序付ける関数を戻す。つまり、 `{(:X :Y) extract_key(X) <= extract_key(Y) }` を戻す。

事前条件

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

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

:Set <- TREE_SET.new{(:C)
  C.order(ORDER.by{(:Str) Str.ascii_downcase })
}
Set.push('foo')
Set.push('bar')

stdout.print_line(Set.have?('foo').repr)  # => true
stdout.print_line(Set.have?('FOO').repr)  # => true
stdout.print_line(Set.have?('hoge').repr) # => false

6.18.2. ORDER.min(X Y)

minは、X <= YのときにXを、そうでないときにYを戻す。

事前条件

XとYに対して <= 演算子が定義されていなければならない。

:ORDER.require_from('kink/')

stdout.print_line(ORDER.min(10 20).repr)  # => 10

:Min <- [31 41 59 26 53].reduce(ORDER$min)
stdout.print_line(Min.repr) # => 26

6.18.3. ORDER.max(X Y)

maxは、X >= YのときにXを、そうでないときにYを戻す。

事前条件

XとYに対して <= 演算子が定義されていなければならない。

:ORDER.require_from('kink/')

stdout.print_line(ORDER.max(10 20).repr)  # => 20

:Max <- [31 41 59 26 53].reduce(ORDER$max)
stdout.print_line(Max.repr) # => 59