The normal interaction with GAP happens in the so--called read eval print loop. This means that you type an input, GAP first reads it, evaluates it, and prints the result. The exact sequence is as follows.
To show you that  it is ready  to accept your  input, GAP displays the
prompt gap .  When you see this, you know that GAP is waiting for
your input.
Note that every statement must be terminated by a semicolon. You must also enter return before GAP starts to read and evaluate your input. Because GAP does not do anything until you enter return, you can edit your input to fix typos and only when everything is correct enter return and have GAP take a look at it (see Line Editing). It is also possible to enter several statements as input on a single line. Of course each statement must be terminated by a semicolon.
It is absolutely acceptable to enter a single statement on several lines.
When you have entered the beginning of a  statement, but the statement is
not  yet  complete, and  you  enter  return, GAP  will  display  the
partial prompt    .   When you see   this, you  know that GAP  is
waiting for the rest of the statement.  This happens also when you forget
the semicolon ; that terminates every GAP statement.
When you enter return, GAP first checks your input to see if it is syntactically correct (see chapter The Programming Language for the definition of syntactically correct). If it is not, GAP prints an error message of the following form
    gap> 1 * ;
    Syntax error: expression expected
    1 * ;
        ^ 
The first line tells you what is wrong about  the input, in this case the
* operator takes  two expressions as  operands, so obviously the right
one is missing.  If the  input came from a  file (see Read), this  line
will also contain the filename and the line number.  The second line is a
copy of the input.  And the third  line contains a  caret pointing to the
place in the previous line where GAP realized that something is wrong.
This need not be  the exact place where  the error is,  but it is usually
quite close.
Sometimes, you will also  see a partial prompt after  you have entered an
input  that is  syntactically incorrect.   This is  because  GAP is so
confused by your  input, that it thinks that  there is still something to
follow.  In this case you  should enter ;return repeatedly,  ignoring
further error messages,  until you see the full  prompt  again.  When you
see the full prompt, you know that GAP forgave you and is now ready to
accept your next -- hopefully correct -- input.
If your input is syntactically correct, GAP evaluates or executes it, The Programming Language for the definition of the evaluation).
If you do not see a prompt, you know that GAP is still working on your last input. Of course, you can type ahead, i.e., already start entering new input, but it will not be accepted by GAP until GAP has completed the ongoing computation.
When GAP is ready it will usually print the result of the computation,
i.e., the value computed.  Note that not  all statements produce a value,
for example, if you enter a for  loop, nothing will be printed, because
the for loop does not produce a value that could be printed.
Also sometimes you do not want to see the result. For example if you have computed a value and now want to assign the result to a variable, you probably do not want to see the value again. You can terminate statements by two semicolons to suppress the printing of the result.
If you have entered several statements on a single line GAP will first read, evaluate, and print the first one, then read evaluate, and print the second one, and so on. This means that the second statement will not even be checked for syntactical correctness until GAP has completed the first computation.
After the result has been printed GAP will display another prompt, and wait for your next input. And the whole process starts all over again. Note that a new prompt will only be printed after GAP has read, evaluated, and printed the last statement if you have entered several statements on a single line.
In each statement  that you  enter the  result of  the previous statement
that produced  a value is available in  the variable last.  The next to
previous result is available in  last2 and  the result produced  before
that is available in last3.
    gap> 1; 2; 3;
    1
    2
    3
    gap> last3 + last2 * last;
    7 
Also in each statement the time spent by the  last  statement, whether it
produced a value or not, is available in the variable time.  This is an
integer that holds the number of milliseconds.
GAP 3.4.4