UNION (unio) Die Operationen der ADT TREE (tree)

TUPLE (tupl)

Domainappl(Element x1, Domain x2)

Das Element x1 wird am Anfang des Tuple x2 eingefügt

Andere Argumentreihenfolge als appr!

x2 wird zerstört

Domainappr(Domain x1,Element x2)

Das Element x2 wird am Ende des Tuple x1 angehängt

Andere Argumentreihenfolge als appl!

x1 wird zerstört

func1binary(func2)

#typedef Domain func1(Domain,Domain)

#typedef Domain func2(Domain,Element)

Funktional

Der Name der Argument-Funktion wird mit dem Implementationsparameter FOLDFCT festgelegt; dient zur Realisierung von Funktionen mit zwei Tuples als Argumenten, die wieder ein Tuple liefern, mit Hilfe von Funktionen mit einem Tuple und einem Element als Argumenten.

Beispiel: conc = binary(FOLDFCT=,,appr``))

Domainconc(Domain x1,Domain x2)

Konkatenation: Tuple x2 wird an Tuple x1 angehängt

x1 und x2 werden zerstört

Domainconc_path(Domain x1,Domain x2)

Konstruktion eines Pfadnamen durch Konkatenation: Tuple x2 wird an Tuple x1 gehängt, NACHDEM an x1 ein Pfad-Delimiter angefügt wurde (unter UNIX der Slash ,,/``, unter MS-DOS der Backslash ,,\``)

x1 und x2 werden zerstört

voidcpc(Domain x1,char tex2html_wrap_inline6338 x2)

Das Tuple x1 wird in einen C-String konvertiert, der an der Adresse x2 anfängt; an das Ende des Strings wird ein Null-Byte gehängt

Sinnvoll nur bei Tuples von Zeichen (z.B. Str)

In der Implementation ,,linklist`` nicht vorhanden

Boolfapp(Domain x1,Str x2)

Ein Tuple x1 wird an die Datei x2 des Datei-Systems angehängt

Es wird angenommen, daß die Elemente einfache, unstrukturierte Objekte sind.

Bei einem Fehler wird FALSE zurückgeliefert, sonst TRUE

funcfold(func1,func2,func3)

#typedef Result func(Domain,x1,...,xn)

#typedef Result func1(Element,x1,...,xk)

#typedef Result func2(void)

#typedef Result func3(Result,Result,x1,...,xn)

Funktional

Die Namen der drei Argument-Funktionen werden mit den Implementationsparametern CVFCT, NULLFCT und FOLDFCT festgelegt, der Resultattyp mit dem Parameter RESULT. Die x1,...,xn stellen zusätzliche optionale Parameter dar, die an func1 bzw. func3 übergeben werden; ihre Datentypen können mit den Implementationsparametern X, XX und XXX für func1 sowie Y, YY, YYY, Z, ZZ und ZZZ für func3 definiert werden. Die genaue Spezifikation können Sie mit vdminfo ermitteln.

Beispiel: Distributive Verkettung der Elemente eines Tuples von Tuples

DOMAINS
* Tup1 = E1 tex2html_wrap_inline6338
* Tup2 = Tup1 tex2html_wrap_inline6338
* IMPLEMENTATIONS
* Tup2 = ...+ fold.dconc(NULLFCT=,,mk_empty``, FOLDFCT=,,conc``)
*

funcfoldix(func1,func2,func3)

#typedef Result func(Domain,x1,...,xn)

#typedef Result func1(Element,Nat0,x1,...,xk)

#typedef Result func2(void)

#typedef Result func3(Result,Result,x1,...,xn)

Funktional (ähnlich fold) -- hier hat die Convert-Funktion func1 als weiteres Argument einen Element-Index, um z.B. die Verarbeitung nur jedes zweiten Elements zu ermöglichen.

Alles weitere ist identisch mit fold (siehe dort).

voidforall(Domain x1,proc x2)

#typedef void proc(Element)

Für alle Elemente im Tuple x1 wird die Prozedur x2 ausgeführt

voidforindex(Domain x1,proc x2)

#typedef void proc(Element,Nat1)

Für alle Elemente im Tuple x1 wird die Prozedur x2 ausgeführt; diese erhält als zusätzliches Argument den Element-Index

voidforrange(Domain x1,proc x2,Nat1 x3,Nat0 x4)

#typedef void proc(Element)

Für den Indexbereich x3...x4 im Tuple x1 wird die Prozedur x2 ausgeführt

voidforsome(Domain x1,predicate x2,proc x3)

#typedef Bool predicate(Element)

#typedef void proc(Element)

Für alle Elemente a im Tuple x1, für die das Prädikat x2(a) erfüllt ist, wird die Prozedur x3 ausgeführt

Domainfread(Str x1)

Ein Tuple wird aus der Datei x1 des Datei-Systems gelesen

Es wird angenommen, daß die Elemente einfache, unstrukturierte Objekte sind.

Bei einem Fehler wird das leere Tuple zurückgeliefert!

Boolfwrite(Domain x1,Str x2)

Ein Tuple x1 wird in die Datei x2 des Datei-Systems geschrieben

Es wird angenommen, daß die Elemente einfache, unstrukturierte Objekte sind.

Bei einem Fehler wird FALSE zurückgeliefert, sonst TRUE

Elementhd(Domain x1)

Liefert das erste Element des Tuple

Nat0index(Domain x1,Element x2)

Liefert die erste Position des Elements x2 im Tuple x1

Ist das Element NICHT vorhanden, wird 0 geliefert

Boolis_empty(Domain x1)

Test auf leeres Tuple

Boolis_ge(Domain x1,Domain x2)

Test, ob x1 tex2html_wrap_inline8519 x2 ist

Boolis_gr(Domain x1,Domain x2)

Test, ob x1 > x2 ist

Elementlast(Domain x1)

PRECONDITION: x1 tex2html_wrap_inline8699

Das letzte Element im Tuple x1 wird geliefert

Nat0len(Domain x1)

Liefert die Länge (Anzahl der Elemente) des Tuple x1

Domainmk2(Element x1,Element x2)

Konstruktion eines zwei-elementigen Tuple < x1,x2 >

Domainmk3(Element x1,Element x2,Element x3)

Konstruktion eines drei-elementigen Tuple < x1,x2,x3 >

Domainmkc(char tex2html_wrap_inline6338 x1)

Der C-String, der an der der Adresse x2 anfängt, wird OHNE das abschließende Null-Byte in ein Tuple konvertiert

Sinnvoll nur bei Tuples von Zeichen (z.B. Str)

In der Implementation ,,linklist`` nicht vorhanden

Domainmklc(char tex2html_wrap_inline6338 x1)

Der C-String, der an der der Adresse x2 anfängt, wird OHNE das abschließende Null-Byte in ein Tuple konvertiert, dabei wird eine Wandlung in Kleinbuchstaben vorgenommen.

Sinnvoll nur bei Tuples von Zeichen (z.B. Str)

In der Implementation ,,linklist`` nicht vorhanden

Domainmkn(Element x1,Nat0 x2)

Konstruktion eines Tuple mit x2 identischen Elementen x1

Domainmk_empty(void)

Das leere Tuple wird geliefert

Domainmk_one(Element x1)

Das einelementige Tuple < x1 > wird geliefert

Domainovwrt1(Domain x1,Nat1 x2,Element x3)

PRECONDITION: len(x1) tex2html_wrap_inline8519 x2

Das Element x3 wird an der Position x2 in das Tuple x1 eingetragen

x1 wird zerstört

Domainovwrt1d(Domain x1,Nat1 x2,Element x3)

PRECONDITION: len(x1) tex2html_wrap_inline8519 x2

Das Element x3 wird an der Position x2 in das Tuple x1 eingetragen; der vorherige Eintrag wird zusätzlich mit del gelöscht

x1 wird zerstört

voidputs(Domain x1,FILE tex2html_wrap_inline6338 x2)

Das Tuple x1 wird zeichenweise mit der C-Bibliotheksfunktion ,,fputc`` in eine C-Datei geschrieben, die mit x2 = fopen(...) geöffnet wurde.

Sinnvoll nur bei Tuples von Zeichen (z.B. Str)

In der Implementation ,,linklist`` nicht vorhanden

Domainrmv1(Domain x1,Nat1 x2)

PRECONDITION: len(x1) tex2html_wrap_inline8519 x2

Das Element an Position x2 wird aus dem Tuple x1 entfernt, die anderen Elemente rücken auf

x1 wird zerstört

Domainrmv1d(Domain x1,Nat1 x2)

PRECONDITION: len(x1) tex2html_wrap_inline8519 x2

Das Element an Position x2 wird aus dem Tuple x1 entfernt, die anderen Elemente rücken auf

Das entfernte Element wird zusätzlich mit del gelöscht

x1 wird zerstört

Nat0search(Domain x1,predicate x2)

#typedef Bool predicate(Element)

Das erste Element im Tuple x1, das das Prädikat x2 erfüllt, wird geliefert; ist keins vorhanden, wird 0 geliefert

Elementsel(Domain x1,Nat1 x2)

PRECONDITION: len(x1) tex2html_wrap_inline8519 x2

Das Element an der Position x2 des Tuple x1 wird geliefert

Domainsub_tup(Domain x1,Nat1 x2,Nat0 x3)

Das Sub-Tuple mit den Elementen an den Positionen x2...x3 wird geliefert; Bereichsüberschreitungen werden sinnvoll bearbeitet.

x1 wird zerstört

Domaintl(Domain x1)

Das Tuple x1 ohne das erste Element wird geliefert

x1 wird zerstört

Domaintld(Domain x1)

Das Tuple x1 ohne das erste Element wird geliefert, zuvor wird del(hd(x1)) aufgerufen

x1 wird zerstört

UNION (unio) Die Operationen der ADT TREE (tree)

VDM Class Library