NAME

Language::MuldisD::Ext::Sequence - Muldis D extension for Seq specific operators

VERSION

This document is Language::MuldisD::Ext::Sequence version 0.20.0.

PREFACE

This document is part of the Muldis D language specification, whose root document is Language::MuldisD; 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 Sequence document describes the system-defined Muldis D Sequence Extension, which consists of generic operators that are specific to the Seq parameterized relation type, and said operators are short-hands for generic relational operators in the language core.

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 Language::MuldisD::Core.

This documentation is pending.

SYSTEM-DEFINED SEQUENCE-CONCERNING FUNCTIONS

function sys.Sequence.Seq.value result ScaTupRel params { topic(Seq), index(UInt) }

This function results in the scalar or nonscalar value attribute of the tuple of topic whose index attribute is index. This function will fail if no tuple exists in topic with the specified index.

function sys.Sequence.Seq.update_value result Seq params { topic(Seq), index(UInt), value(ScaTupRel) }

This function results in its topic argument but that the value attribute of the tuple of topic whose index attribute is index has been updated with a new scalar or nonscalar value given by value. This function will fail if no tuple exists in topic with the specified index, or if the declared type of value isn't a subtype of the declared type of the value attribute.

function sys.Sequence.Seq.insertion result Seq params { topic(Seq), index(UInt), value(ScaTupRel) }

This function results in its topic argument but that a new tuple has been inserted whose index is index and whose value is value; any existing tuples with index values greater than or equal to index had theirs incremented by 1. As a trivial case, if index is equal to zero or is equal to the cardinality of topic, then value has become the new first or last (or only) element, respectively. This function will fail if index is greater than the cardinality of topic, or if the declared type of value isn't a subtype of the declared type of the value attribute.

function sys.Sequence.Seq.deletion result Seq params { topic(Seq), index(UInt) }

This function results in its topic argument but that a tuple has been deleted whose index is index; any existing tuples with index values greater than or equal to index had theirs decremented by 1. This function will fail if no tuple exists in topic with the specified index.

function sys.Sequence.Seq.is_element result Bool params { topic(Seq), value(ScaTupRel) }

This function results in Bool:true iff its value argument matches the value attribute of at least one tuple of its topic argument (that is, iff conceptually value is an element of topic), and Bool:false otherwise. This function will fail if the declared type of value isn't a subtype of the declared type of that attribute.

function sys.Sequence.Seq.is_not_element result Bool params { topic(Seq), value(ScaTupRel) }

This function is exactly the same as sys.Sequence.Seq.is_element except that it results in the opposite boolean value when given the same arguments.

function sys.Sequence.Seq.reduction result ScaTupRel params { topic(Seq), func(Cat.NameChain), assuming(Tuple), identity(ScaTupRel) }

This function is the same as sys.Set.Set.reduction, including that input values for the reduction come from the value attribute of topic, except that it works with a Seq rather than a Set. Also, the function named in func is only associative, and not commutative; the arguments to v1 and v2 of func are guaranteed to be consecutive input elements, with the result returning to their place in sequence beween the other input elements.

function sys.Sequence.Seq.maybe_reduction result Maybe params { topic(Seq), func(Cat.NameChain), assuming(Tuple) }

This function is to sys.Set.Set.maybe_reduction as sys.Sequence.Seq.reduction is to sys.Set.Set.reduction.

function sys.Sequence.Seq.catenation result Seq params { topic(SeqOfSeq) }

This function results in the catenation of the N element values of its argument; it is a reduction operator that recursively takes each consecutive pair of input values and catenates (which is associative) them together until just one is left, which is the result. To catenate 2 Seq means to union their tuples after first increasing all the index values of the second one by the cardinality of the first one. If topic has zero values, then catenate results in the empty sequence value, which is the identity value for catenate.

function sys.Sequence.Seq.repeat result Seq params { topic(Seq), count(UInt) }

This function results in the catenation of count instances of topic.

function sys.Sequence.Seq.reverse result Seq params { topic(Seq) }

This function results in its argument but that the order of its elements has been reversed. For example, the input { 0=>'a', 1=>'b', 2=>'c', 3=>'d'} results in { 0=>'d', 1=>'c', 2=>'b', 3=>'a' }.

function sys.Sequence.Seq.is_subseq result Bool params { look_in(Seq), look_for(Seq) }

This function results in Bool:true iff the sequence of values comprising look_for is a sub-sequence of the sequence of values look_in, and Bool:false otherwise. This function will fail if the 2 arguments don't have the same heading.

function sys.Sequence.Seq.is_not_subseq result Bool params { look_in(Seq), look_for(Seq) }

This function is exactly the same as sys.Sequence.Seq.is_subseq except that it results in the opposite boolean value when given the same arguments.

SEE ALSO

Go to Language::MuldisD for the majority of distribution-internal references, and Language::MuldisD::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-2008, Darren Duncan.

See the LICENSE AND COPYRIGHT of Language::MuldisD for details.

ACKNOWLEDGEMENTS

The ACKNOWLEDGEMENTS in Language::MuldisD apply to this file too.