next node: ISeqConv,
prev node: Subsystem Infinite Sequences,
up to node: Subsystem Infinite Sequences


ISeq

Signature of ISeq

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

SIGNATURE ISeq[data]

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

-- inifinite sequences

-- Parameter
SORT data

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

-- the type itself
SORT iseq

-- constructing a seq from datas

FUN gen: data -> iseq   -- gen(d) == <d, d, d, ... >

FUN repeat: seq -> iseq -- repeat(s) == s ++ s ++ s ++ ...

FUN ::  : data ** iseq -> iseq -- prepend
FUN cons: data ** iseq -> iseq -- prepend (alternate name)
FUN +%  : iseq ** data -> iseq -- append at end

-- constructing a seq from a function
FUN ..         : nat -> (nat -> data) -> iseq
               -- (n .. )(f) = <f(n), f(n+1), ... >

FUN iter : data ** (data -> data)  -> iseq
                -- iter(start, it) == 
                --    <start,  it(start), ... >

-- combining sequences
FUN ++  :  seq ** iseq -> iseq 
FUN ++  : iseq ** iseq -> iseq  -- concat

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

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

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

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

-- working on a sequence

FUN take        : nat ** iseq -> seq                    
                -- take (k, s)
                -- take first k components of s
                -- informally:
                -- take (k, <e_0, ..., e_k-1, ...>) = <e_0, ..., e_k-1>

FUN drop        : nat ** iseq -> iseq                   
                -- drop (k, s)
                -- drop first k components of s
                -- informally:
                -- drop (k, <e_0, ..., e_k-1, e_k, ... >) 
                --				= <e_k, ..., e_n>

FUN split       : nat ** iseq -> seq ** iseq            
                -- split (n, s) = (take (n,s), drop (n,s))
                -- split s after n elements

FUN rt          : iseq -> iseq
                -- rt(<e_0, ..., e_n>) = <e_1, ..., e_n>

-- accessing datas in a sequence
FUN ft          : iseq -> data   
    
-- information about a sequence

FUN find?       : (data -> bool) ** iseq -> data
                -- find? (p, s)
                -- return some component of s fulfilling p

-- for compatibility reasons to finite sequences
-- though find?(p,s) can never return nil
FUN find?       : (data -> bool) ** iseq -> option[data]

-- not for user purpose (oder doch?)

FUN :: : (() -> data) ** (() -> iseq) -> iseq


next node: ISeqConv,
prev node: Subsystem Infinite Sequences,
up to node: Subsystem Infinite Sequences