The problem you have is that the top level doesn't read the newline at the end of the s-expression, so your read-line gets that newline immediately when it executes. A portable fix? If you're writing an interactive read-line loop, then just make it handle blank lines gracefully. Otherwise, fix the top level. I can put in a plug here for the top level we use at Berkeley, but I won't.