RETALL Return From All Keyboard Sessions

Section: Flow Control


The retall statement is used to return to the base workspace from a nested keyboard session. It is equivalent to forcing execution to return to the main prompt, regardless of the level of nesting of keyboard sessions, or which functions are running. The syntax is simple

The retall 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 retall effectively forces FreeMat to exit your program and return to the interactive prompt.


Here we demonstrate an extreme example of retall. We are debugging a recursive function self to calculate the sum of the first N integers. When the function is called, a keyboard session is initiated after the function has called itself N times. At this keyboard prompt, we issue another call to self and get another keyboard prompt, this time with a depth of 2. A retall statement returns us to the top level without executing the remainder of either the first or second call to self:

function y = self(n)
  if (n>1)
    y = n + self(n-1);
    printf('y is %d\n',y);
    y = 1;
    printf('y is initialized to one\n');

--> self(4)
y is initialized to one
[self,8]--> self(6)
y is initialized to one
[self,8]--> retall