% Copyright The Numerical Algorithms Group Limited 1992-94. All rights reserved. % !! DO NOT MODIFY THIS FILE BY HAND !! Created by ht.awk. \newcommand{\ExitXmpTitle}{Exit} \newcommand{\ExitXmpNumber}{9.20} % % ===================================================================== \begin{page}{ExitXmpPage}{9.20 Exit} % ===================================================================== \beginscroll A function that does not return directly to its caller has \spadtype{Exit} as its return type. The operation \spadfun{error} is an example of one which does not return to its caller. Instead, it causes a return to top-level. \xtc{ }{ \spadpaste{n := 0 \bound{n}} } \xtc{ The function \userfun{gasp} is given return type \spadtype{Exit} since it is guaranteed never to return a value to its caller. }{ \begin{spadsrc}[\bound{gasp}\free{n}] gasp(): Exit == free n n := n + 1 error "Oh no!" \end{spadsrc} } \xtc{ The return type of \userfun{half} is determined by resolving the types of the two branches of the \spad{if}. }{ \begin{spadsrc}[\bound{half}\free{gasp}] half(k) == if odd? k then gasp() else k quo 2 \end{spadsrc} } \xtc{ Because \userfun{gasp} has the return type \spadtype{Exit}, the type of \spad{if} in \userfun{half} is resolved to be \spadtype{Integer}. }{ \spadpaste{half 4 \free{half}\bound{app1}} } \xtc{ }{ \spadpaste{half 3 \free{half app1}\bound{app2}} } \xtc{ }{ \spadpaste{n \free{app2}} } For functions which return no value at all, use \spadtype{Void}. See \downlink{``\ugUserTitle''}{ugUserPage} in Section \ugUserNumber\ignore{ugUser} and \downlink{`Void'}{VoidXmpPage}\ignore{Void} for more information. % \showBlurb{Exit} \endscroll \autobuttons \end{page} %