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 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
*
Tup2 = Tup1
*
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 x2 ist
Boolis_gr(Domain x1,Domain x2)
Test, ob x1 > x2 ist
Elementlast(Domain x1)
PRECONDITION: x1
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 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 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) 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) 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 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) 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) 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) 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
VDM Class Library