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