At Wed, 16 Oct 2019 21:25:35 +0000, Sage Gerard wrote:
> I'd like to understand the reader better, and this seems relevant to
> it. In this REPL session I do not escape \S with a second \ in the
> first interaction. After I introduce the slash later, the REPL never
> really "recovers." Even a simple (displayln) stops producing output.
>
> What's happening?
You're stuck inside a string.
The reader sees
(regexp-match #rx"typedef (\S
and then complains. After complaining, it goes back to reading
expressions. At that point, the input stream still has the unconsumed
characters. Specifically, the next characters are
+)
so, `+` is read successfully and evaluated, and the result prints
#<procedure:+>. Reading again encounters the closing parenthesis by
itself, so that's the next error. But the input stream still has
more...
" "
Those three characters read ok, and the value prints as " ". The input
stream continues
typedef void ()
and so on. Your transcript ends with a double quote that is not yet
closed.
DrRacket's interaction area takes a different (and less confusing)
approach than command-line Racket. As soon as there's any kind of error
from reading and evaluating text submitted at a prompt, DrRacket (not
the reader) discards the input stream and starts a fresh stream with
the new prompt.
But as far as the reader goes, the relevant property is that it stops
consuming characters from a stream when it encounters an error.