next up previous contents
Next: Bibliotheken Up: Erste Schritte Previous: Eingaben editieren

  
Prozeduren

Hat man ein konkretes Problem, das mit SINGULAR zu lösen ist, ruft man das Programm auf, gibt die Befehlsfolge ein und erhält ein Ergebnis. Häufig möchte man gleiche Rechnungen aber mit unterschiedlichen Eingaben durchführen. Dann ist es sinnvoll, die Befehlsfolge als Prozedur zu schreiben, der man die gewünschten Eingaben als Argumente übergibt und die die Lösungen zurückgibt.

Die Syntax einer Prozedur ist recht einfach:


proc PROZEDURNAME [PARAMETERLISTE]
{
PROZEDURKÖRPER
}



Als PROZEDURNAME kommt jede noch nicht anderweitig vergebene Buchstabenfolge in Frage. In der PARAMETERLISTE sind die Typen und Namen der Argumente, die der Prozedur übergeben werden, festgelegt. Dabei ist die PARAMETERLISTE durch runde Klammern einzuschließen. Der PROZEDURKÖRPER enthält eine Abfolge von zulässigem SINGULAR-Code. Soll die Prozedur ein Ergebnis zurückliefern, so sollte dieses Ergebnis in einer Variablen ergebnis gespeichert werden und die Prozedur sollte mit dem Befehl return(ergebnis); enden.

Ein Beispiel sagt meist mehr als tausend Worte:


proc permcol (matrix A, int c1, int c2)
{
matrix B=A;
B[1..nrows(B),c1]=A[1..nrows(A),c2];
B[1..nrows(B),c2]=A[1..nrows(A),c1];
return(B);
}



Die Prozedur permcol soll zwei Spalten einer Matrix vertauschen. Hierfür erwartet sie drei Argumente. Das erste Argument erhält den Namen A und ist vom Typ matrix, die beiden folgenden heißen c1 und c2 und sind vom Typ integer. Es folgen SINGULAR-Anweisungen und das Ergebnis wird in der Variablen B vom Typ matrix gespeichert, die dann mit return(B); zurückgegeben wird. Das bedeutet insbesondere, daß das Ergebnis der Prozedur vom Typ matrix ist (siehe Abschnitt [*]).

Eine Prozedur wird aufgerufen, indem man den Prozedurnamen, gefolgt von den Argumenten in runden Klammern eingibt. Z. B. 


LIB "matrix.lib"; LIB "inout.lib"; ring r=0,(x),lp;
matrix A[3][3]=1,2,3,4,5,6,7,8,9;
pmat(A,2);
$\mapsto\;$
1 2 3
4 5 6
7 8 9

matrix B=permcol(A,2,3);
pmat(B,2);
$\mapsto\;$
1 3 2
4 6 5
7 9 8




Variablen, die innerhalb einer Prozedur definiert werden, sind nur dort bekannt, und können deshalb durchaus die gleichen Namen haben, wie Objekte, die außerhalb der Prozedur definiert sind.


next up previous contents
Next: Bibliotheken Up: Erste Schritte Previous: Eingaben editieren
Thomas Keilen
2000-03-03