NAME
Muldis::D::Ext::Ordered - Muldis D extension for generic ordered-sensitive operators
VERSION
This document is Muldis::D::Ext::Ordered version 0.92.0.
PREFACE
This document is part of the Muldis D language specification, whose root document is Muldis::D; you should read that root document before you read this one, which provides subservient details.
DESCRIPTION
Muldis D has a mandatory core set of system-defined (eternally available) entities, which is referred to as the Muldis D core or the core; they are the minimal entities that all Muldis D implementations need to provide; they are mutually self-describing and are used to bootstrap the language; any entities outside the core, called Muldis D extensions, are non-mandatory and are defined in terms of the core or each other, but the reverse isn't true.
This current Ordered
document describes the system-defined Muldis D Ordered Extension, which consists of generic operators that are sensitive to an ordering of a type's values, and are used for such things as list sorting or quota queries or determining before/after/min/max/between/etc. They can potentially be used with values of any data type as long as said data type has a (total) order_determination
function defined for it, and all system-defined conceptually-ordered Muldis D scalar root types do.
This current document does not describe the polymorphic operators that all types, or some types including core types, have defined over them; said operators are defined once for all types in Muldis::D::Core.
This documentation is pending.
SYSTEM-DEFINED ORDER-CONCERNING FUNCTIONS
Each of these functions which has the parameter named func
is a wrapper over the order_determination
function named in its func
argument when the latter function is curried by a calling-function-specific is_reverse_order
argument value. For any scalar root type's type-default order function, the argument for func
is sys.std.Core.Scalar.order
. Each func
parameter is optional and defaults to sys.std.Core.Scalar.order
if no explicit argument is given to it.
sys.std.Ordered.is_before
function sys.std.Ordered.is_before (Bool <-- Universal $topic, Universal $other, OrdDetFuncRef $func?)
This function results in Bool:true
iff the wrapped function would result in Order:increase
when given the same corresponding 2 arguments plus a is_reverse_order
argument of Bool:false
, and Bool:false
otherwise. Note that this operation is also known as less than or <
.
sys.std.Ordered.is_after
function sys.std.Ordered.is_after (Bool <-- Universal $topic, Universal $other, OrdDetFuncRef $func?)
This function is an alias for sys.std.Ordered.is_before
except that it transposes the topic
and other
arguments. This function results in Bool:true
iff the wrapped function would result in Order:decrease
when given the same corresponding 2 arguments plus a is_reverse_order
argument of Bool:false
, and Bool:false
otherwise. Note that this operation is also known as greater than or >
.
sys.std.Ordered.is_before_or_same
function sys.std.Ordered.is_before_or_same (Bool <-- Universal $topic, Universal $other, OrdDetFuncRef $func?)
This function is exactly the same as sys.std.Ordered.is_before
except that it results in Bool:true
if its 2 primary arguments are identical. Note that this operation is also known as less than or equal to or ≤
.
sys.std.Ordered.is_after_or_same
function sys.std.Ordered.is_after_or_same (Bool <-- Universal $topic, Universal $other, OrdDetFuncRef $func?)
This function is an alias for sys.std.Ordered.is_before_or_same
except that it transposes the topic
and other
arguments. This function is exactly the same as sys.std.Ordered.is_after
except that it results in Bool:true
if its 2 primary arguments are identical. Note that this operation is also known as greater than or equal to or ≥
.
sys.std.Ordered.is_inside_range
function sys.std.Ordered.is_inside_range (Bool <-- Universal $topic, Universal $min, Universal $max, Bool $min_is_outside?, Bool $max_is_outside?, OrdDetFuncRef $func?)
This function results in Bool:true
iff its topic
argument is within the range whose bounds are defined by its min
and max
arguments. If min_is_outside
or max_is_outside
are Bool:true
, then topic
is not considered to be within the range if it is equal to min
or max
, respectively; otherwise, topic
is considered to be within the range if it is equal to min
or max
. This function's min
and max
arguments must be of compatible declared types with topic
and order
as per the wrapped function; otherwise this function will fail|warn when the wrapped function would. This function will fail if max
is before min
. Each of the m[in|ax]_is_outside
parameters is optional and defaults to Bool:false
if no explicit argument is given to it. Note that this operation is also known as between, and depending on the combination of arguments to its m[in|ax]_is_outside
parameters, it is alternately also known as one of [≤≤
, ≤<
, <≤
, <<
].
sys.std.Ordered.is_outside_range
function sys.std.Ordered.is_outside_range (Bool <-- Universal $topic, Universal $min, Universal $max, Bool $min_is_outside?, Bool $max_is_outside?, OrdDetFuncRef $func?)
This function is exactly the same as sys.std.Ordered.is_inside_range
except that it results in the opposite boolean value when given the same arguments. Note that this operation is also known as not between, and depending on the combination of arguments to its m[in|ax]_is_outside
parameters, it is alternately also known as one of [!≤≤
, !≤<
, !<≤
, !<<
].
sys.std.Ordered.min
function sys.std.Ordered.min (Universal <-- Set $topic, OrdDetFuncRef $func?)
This function is a reduction operator that recursively takes each pair of its N input element values and picks the minimum of the 2 (which is commutative, associative, and idempotent) until just one is left, which is the function's result. If topic
has zero values, then this function will fail. Note that, conceptually min
does have an identity value which could be this function's result when topic
has zero values, which is the result type's concept of positive infinity; however, in practice there is little benefit to min
supporting this identity value, since the wrapped order_determination
function can't supply the value, and also many types' concept of positive infinity is impossible or impractically large to represent, such as with the infinite Text
type.
sys.std.Ordered.max
function sys.std.Ordered.max (Universal <-- Set $topic, OrdDetFuncRef $func?)
This function is exactly the same as sys.std.Ordered.min
except that it results in the maximum input element value rather than the minimum one. (Note that, conceptually max
has an identity value which is the result type's concept of negative infinity, but it is unsupported here).
sys.std.Ordered.minmax
function sys.std.Ordered.minmax (Tuple <-- Set $topic, OrdDetFuncRef $func?)
This function results in a binary tuple whose attribute names are min
and max
and whose respective attribute values are what sys.std.Ordered.min
and sys.std.Ordered.max
would result in when given the same arguments. If topic
has zero values, then this function will fail.
sys.std.Ordered.maybe_min
function sys.std.Ordered.maybe_min (Maybe <-- Set $topic, OrdDetFuncRef $func?)
This function is exactly the same as sys.std.Ordered.min
except that it results in a Maybe
of what is otherwise the result type, and that result has zero elements if the argument has zero elements, rather than the function failing.
sys.std.Ordered.maybe_max
function sys.std.Ordered.maybe_max (Maybe <-- Set $topic, OrdDetFuncRef $func?)
This function is to sys.std.Ordered.max
as sys.std.Ordered.maybe_min
is to sys.std.Ordered.min
.
sys.std.Ordered.maybe_minmax
function sys.std.Ordered.maybe_minmax (Relation <-- Set $topic, OrdDetFuncRef $func?)
This function results in a binary relation whose attribute names are min
and max
. If topic
has zero values then the result has a single tuple whose respective attribute values are what sys.std.Ordered.min
and sys.std.Ordered.max
would result in when given the same arguments; if topic
has zero values, then the result has zero tuples.
SEE ALSO
Go to Muldis::D for the majority of distribution-internal references, and Muldis::D::SeeAlso for the majority of distribution-external references.
AUTHOR
Darren Duncan (perl@DarrenDuncan.net
)
LICENSE AND COPYRIGHT
This file is part of the formal specification of the Muldis D language.
Muldis D is Copyright © 2002-2009, Muldis Data Systems, Inc.
See the LICENSE AND COPYRIGHT of Muldis::D for details.
TRADEMARK POLICY
The TRADEMARK POLICY in Muldis::D applies to this file too.
ACKNOWLEDGEMENTS
The ACKNOWLEDGEMENTS in Muldis::D apply to this file too.