This condition definition computes the part of the sentence that needs to be re-parsed. Its two arguments are its "output" or "return values" - a standard way to write things in Prolog. On line 4, it is the value of "NewReversed" which is being computed, not that of "PreviousWords" as might at first be expected. "PreviousWords" and "SentenceBegin" are both known, and the line PreviousWords results from appending NewReversed to SentenceBegin is a typical Prolog/COGENT notation used to compute the difference between the two lists. An example would be: Previous Words: [cat, the] (reversed list) Sentence Begin: [the] (reversed list, obtained from Choice Points) [cat, the] = NewReversed @ [the] [cat] (reversed) NewContent = [cat] (normal ordering; here a special case of length one) In addition, we need to take into account the case in which the parser backtracks several times in a row, especially that of "nested" backtracking, that is, the case in which the parser parses several words, notices it is on the wrong track, backtracks to an earlier point, and then *while re-analyzing* has to backtrack again. In this case, when the parser backtracks for the second time, the buffer "ReProcess" will contain words that must be re-analyzed. If we did not match them and append them after NewContent, they would be irremediably lost in the process, because they have already been "read" and are therefore not available from the input (the display) anymore.