% 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}
%
