|
6.3.7 Return type of procedures
Although the SINGULAR language is a strongly typed programming
language, the type of the
return value of a procedure does not need to be specified. As a
consequence, the return type of a procedure may vary, i.e., may, for
example, depend on the input. However, the return value
of such a procedure may then only be assigned to a variable of type
def .
| proc type_return (int i)
{
if (i > 0) {return (i);}
else {return (list(i));}
}
def t1 = type_return(1);
def t2 = type_return(-1);
typeof(t1); typeof(t2);
==> int
==> list
|
Furthermore, it is mandatory to assign the return value of a procedure
to a variable of type def , if a procedure changes the current
ring using the keepring command (see keepring) and returns a
ring-dependent value (like a polynomial or module).
| proc def_return
{
ring r=0,(x,y),dp;
poly p = x;
keepring r;
return (x);
}
def p = def_return();
// poly p = def_return(); would be WRONG!!!
typeof(p);
==> poly
|
On the other hand, more than one value can be returned by a single
return statement. For example,
| proc tworeturn () { return (1,2); }
int i,j = tworeturn();
|
|