Correct, although I feel it's worth pointing out that this code actually checks for a sentinel value (a bang on a line of its own) rather than evaluating each expression as entered.
Also, I just realized, in order to be a proper REPL, it really should be print eval ...