next node: SeqMap,
prev node: SeqFold,
up to node: Subsystem Sequences Proper


SeqIndex

Signature of SeqIndex

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

SIGNATURE SeqIndex[data]

$Date: 2010-09-30 18:24:17 +0200 (Do, 30. Sep 2010) $ ($Revision: 616 $)

-- functions which use an "index" for accessing arbitary elements of a
-- sequence
-- note, that some of these functions are quite expensive and therefore
-- should be avoided, if possible

-- Parameter
SORT data

IMPORT Nat ONLY nat
       Seq[data] ONLY seq
       Option[nat] ONLY option

FUN !           : seq ** nat -> data            
                -- s ! i
                -- select component at position i in s, where i ranges from 
                -- 0 upto #(s)-1	
                -- (positions of components in sequences are counted beginning
                -- from 0!)
                -- informally:
                -- <...,e_i,...> ! i = e_i
                --      ^i	
                -- undefined, if i >= #(s)

FUN pos         : (data -> bool) ** seq -> option[nat]
                -- pos(P, s)
                -- return avail(n), for first component of s which fulfills
                -- predicate P, return nil otherwise

FUN slice       : seq ** nat ** nat -> seq              
                -- slice (s, i, j)
                -- subsequence of s from position i upto j where i <= j < #(s)
                -- range from 0 upto #(s) - 1 and i <= j 
                -- informally:
                -- slice (<...,e_i,...,e_i+n,...>, i, i+n) = <e_i,...,e_i+n>
                --	   ^0  ^i      ^i+n
                -- function is total: if i >= #(s) or i > j then result <>
                -- if j > #(s), assume j = #(s) - 1

FUN upd         : nat ** data ** seq -> seq
                -- upd(i, d, <e_0, ..., e_i, ..., e_n>) = 
                --		   <e_0, ..., d, ..., e_n>
                -- if i >= #(s), do nothing

FUN upd         : nat ** (data -> data) ** seq -> seq
                -- upd(i, f, <e_0, ..., e_i, ..., e_n>) = 
                --		   <e_0, ..., f(e_i), ..., e_n>
                -- if j > #(s), assume j = #(s) - 1

FUN swap        : nat ** nat ** seq -> seq
                -- swap(i, j, <e_0, ..., e_i, ..., e_j, ..., e_n>) =
                --	   <e_0, ..., e_j, ..., e_i, ..., e_n>
                -- undefined, if either i >= #(s) or j >= #(s)
                
FUN repl        : seq ** nat ** seq -> seq
                -- repl(<e_0, e_1, ..., e_n>, k, <d_0, d_1, ..., d_m>) = r
                -- replace elements e_k, e_k+1, ... e_k+m by 
                --				d_0, d_1, ..., d_m
                -- does nothing, if k > n
                -- replaces only upto e_n, truncates d, if k+m > n

FUN insert      : seq ** nat ** seq -> seq
                -- insert(e, k, d) = take(k, e) ++ d ++ drop(k, e)

FUN delete      : seq ** nat ** nat -> seq
                -- delete (s, i, j) 
                -- delete subsequence from position i upto j in s
                -- where i <= j < #(s)
                -- informally:
                -- delete ('...ab...cd...', i, i+n) 	= '...ad...'
                --		^i  ^i+n	
                -- function is total: if i > j, returns s
                -- if j >= #(s), assume = #(s)-1


next node: SeqMap,
prev node: SeqFold,
up to node: Subsystem Sequences Proper