File: flow_retall.html

package info (click to toggle)
freemat 4.0-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 174,756 kB
  • ctags: 67,023
  • sloc: cpp: 351,059; ansic: 255,892; sh: 40,590; makefile: 4,387; perl: 4,058; asm: 3,313; pascal: 2,718; fortran: 1,722; ada: 1,681; ml: 1,360; cs: 879; csh: 795; python: 430; sed: 162; lisp: 160; awk: 5
file content (63 lines) | stat: -rw-r--r-- 1,909 bytes parent folder | download | duplicates (3)
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&gt;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>
--&gt; self(4)
y is initialized to one
[self,8]--&gt; self(6)
y is initialized to one
[self,8]--&gt; retall
</PRE>
<P>
</BODY>
</HTML>