1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>RETALL Return From All Keyboard Sessions
</TITLE>
</HEAD>
<BODY>
<H2>RETALL Return From All Keyboard Sessions
</H2>
<P>
Section: <A HREF=sec_flow.html> Flow Control </A>
<H3>Usage</H3>
The <code>retall</code> statement is used to return to the base workspace
from a nested <code>keyboard</code> session. It is equivalent to forcing
execution to return to the main prompt, regardless of the level
of nesting of <code>keyboard</code> sessions, or which functions are
running. The syntax is simple
<PRE>
retall
</PRE>
<P>
The <code>retall</code> is a convenient way to stop debugging. In the
process of debugging a complex program or set of functions,
you may find yourself 5 function calls down into the program
only to discover the problem. After fixing it, issueing
a <code>retall</code> effectively forces FreeMat to exit your program
and return to the interactive prompt.
<H3>Example</H3>
Here we demonstrate an extreme example of <code>retall</code>. We
are debugging a recursive function <code>self</code> to calculate the sum
of the first N integers. When the function is called,
a <code>keyboard</code> session is initiated after the function
has called itself N times. At this <code>keyboard</code> prompt,
we issue another call to <code>self</code> and get another <code>keyboard</code>
prompt, this time with a depth of 2. A <code>retall</code> statement
returns us to the top level without executing the remainder
of either the first or second call to <code>self</code>:
<P>
<PRE>
self.m
function y = self(n)
if (n>1)
y = n + self(n-1);
printf('y is %d\n',y);
else
y = 1;
printf('y is initialized to one\n');
keyboard
end
</PRE>
<P>
<PRE>
--> self(4)
y is initialized to one
[self,8]--> self(6)
y is initialized to one
[self,8]--> retall
</PRE>
<P>
</BODY>
</HTML>
|