next node: SeqCompare,
prev node: Subsystem Sequences Proper,
up to node: Subsystem Sequences Proper


Seq

The basic functions for the abstract data type of sequences.

Signature of Seq

List of Import References :
See BOOL
See DENOTATION
See Nat
See Option

SIGNATURE Seq [data]

$Date: 2012-02-08 21:11:24 +0100 (Mi, 08. Feb 2012) $ ($Revision: 807 $)

IMPORT Nat ONLY nat
       Option[data] ONLY option

Parameter

SORT data

The Type Itself

TYPE seq == <>                          
            ::(ft:data, rt:seq)

Alternate (alphabetic) names for constructors and discriminators. Note that you can not use them in pattern-based definitions.

 
FUN empty: seq
FUN cons:  data ** seq -> seq
FUN empty? 
    cons?   : seq -> bool

Constructing a Seq From Datas

%(e_0, ..., e_n-1) = <e_0, ..., e_n-1>

FUN %   : data ->seq                            
    %   : data ** data -> seq                   
    %   : data ** data ** data -> seq           
    %   : data ** data ** data ** data -> seq           
    %   : data ** data ** data ** data ** data -> seq
    %   : data ** data ** data ** data ** data ** data -> seq
    %   : data ** data ** data ** data ** data ** data ** data -> seq
    %   : data ** data ** data ** data ** data ** data ** data ** data -> seq

Append an element to the beginning (::, cons) or to the end (+%) of a sequence.

FUN ::  : data ** seq -> seq 
FUN cons: data ** seq -> seq
FUN +%  : seq ** data -> seq

constructing a Seq From a Function

(n_1 .. n_2)(f) = <f(n1), f(n1 +1), ..., f(n2)>

FUN ..         : nat ** nat -> (nat -> data) -> seq

iter(start, it, P) = <start, it(start), ... it^n(start)>, where n+1 is the smallest number such that ~P(it^(n+1)(start)).

 
FUN iter : data ** (data -> data) ** (data -> bool) -> seq

Combining Sequences

Concatenate sequences.

FUN ++  : seq ** seq -> seq

Concatenate: +/+(d)(s1, s2) concatenate sequences, put d inbetween, if both are nonempty.

FUN +/+ : data -> seq ** seq -> seq 
FUN +/+ : seq -> seq ** seq -> seq 

Concatenate: +%+(d)(s1, s2) concatenate sequences, put d inbetween unconditionally.

FUN +%+ : data -> seq ** seq -> seq 
FUN +%+ : seq -> seq ** seq -> seq

Working on a Sequence

Take or drop the first k elements of a sequence. split performs both operations simultaneously: split (n, s) = (take (n,s), drop (n,s)). These functions adjust the index to the length of the sequence if it is too great.

FUN take        : nat ** seq -> seq                     
FUN drop        : nat ** seq -> seq                     
FUN split       : nat ** seq -> seq ** seq              

Drop the last element (front) or the first (rt). These functions abort on empty sequences.

FUN front       : seq -> seq
FUN rt          : seq -> seq

FUN revert      : seq -> seq

Accessing Datas in a Sequence

FUN ft last     : seq -> data

Information About a Sequence

FUN # : seq -> nat                              -- length

Predicates on a Sequence

Existence of elements fulfilling predicate: exist? checks if at least one element of the sequence fulfills a predicate; exist1? checks if exactly one element of the sequence fulfills a predicate.

FUN exist?  : (data -> bool) ** seq -> bool
FUN exist1? : (data -> bool) ** seq -> bool

Check if all elements of a sequence fulfill a predicate.

FUN forall? : (data -> bool) ** seq -> bool

Find and return an element fulfilling a predicate, if it exists.

FUN find?       : (data -> bool) ** seq -> option[data]

Comparing Sequences

If called with an total strict order on its elements, < is a lexicographic total strict order on sequences. = is similar for equality (equivalence) relations.

FUN < : (data ** data -> bool) -> (seq ** seq -> bool)
FUN = : (data ** data -> bool) -> (seq ** seq -> bool)


next node: SeqCompare,
prev node: Subsystem Sequences Proper,
up to node: Subsystem Sequences Proper