next node: ArrayFilter,
prev node: Subsystem Arrays,
up to node: Subsystem Arrays


Array

Signature of Array

List of Import References :
See BOOL
See DENOTATION
See Nat

SIGNATURE Array [data]

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

-- version 1.5

-- monolithic arrays with O(1) access and occassionaly O(1) update
-- NOTE: indices of arrays range from 0 upto the length - 1

-- Parameter
SORT data

IMPORT Nat ONLY nat

-- the type itself
SORT array

-- constructing new arrays

FUN init: nat**data->array                      
    init: nat**(nat->data)->array               
        -- init (n,d) === init (n,\\ _ .d)
        -- generate array of size n and initial 
        -- data f (i) for  i = 0 .. n-1
        -- informally:
        -- init (n,f) = [f(0)...f(n-1)]
        --		 ^0     ^n-1
        -- init (0, f) is the empty array

FUN empty: array
        -- the empty array

-- combining arrays

FUN ++ : array ** array -> array
        -- a1 ++ a2
        -- concatentation of two arrays

-- working on an array

FUN upd : nat**data**array->array               
    :=  : array**nat**data->array
        -- upd (i,d,a) === (a,i) := d
        -- update i-th element of array a with value d
        -- where i ranges from 0 upto #(a)-1

FUN upd : nat**(data->data)**array->array       
        -- upd (i,f,a) 
        -- update i-th element of array a with value f(a!i)
        -- where i ranges from 0 upto #(a)-1
 
FUN swap: array**nat**nat->array                
        -- swap(a,i,j)
        -- swap elements i and j of array a
        -- undefined, if either i >= #(a) or j >= #(a)

FUN delete: array ** nat ** nat  -> array
        -- delete (a, i, j)
        -- delete from position i upto j in d
        -- function is total; indices are occasionally truncated

FUN insert: array ** nat ** array -> array
        -- insert (d1, i, d2)
        -- insert denotation d2 in d1 at position i
        -- function is total; indices are occasionally truncated

FUN extend: array ** nat ** data -> array
    extend: array ** nat ** (nat -> data) -> array
        -- extend(a,n,d) === extend(a,n,\\ _ . d)
        -- extend array by n entrys at the end
        -- informally:
        -- extend(a,n,f) == a ++ init(n,f)

-- accessing elements of an array
FUN !   : array**nat->data                      
        -- a ! i  
        -- select i-th element of array a
        -- where i ranges from 0 upto #(a)-1

-- information about an array

FUN #   : array->nat    
        -- # (a)			
        -- size of array a
        -- example: # (init (0,d)) = 0

FUN empty? : array -> bool
        -- is the array empty?


next node: ArrayFilter,
prev node: Subsystem Arrays,
up to node: Subsystem Arrays