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