> (lambda () t) is a list.
This is not right, and it's a very basic thing to get wrong. I don't think you understand what you're criticizing.
Even replacing the Bel name, this is not right:
> (fn () t) is a list
You _do_ have to eval it.
bel> (eval '(fn () t))
(lit clo nil () t)
I see the returned list as akin to a serialization format. It's an s-expression rather than some opaque representation that can't be printed. That seems nice, more debuggable. I don't see what makes it harder to compile than an opaque representation. You can compile it just fine, you're just carrying around the source code in say a debug segment of the image.
> (BTW, this is just speculation on your part. The word "screen" doesn't actually appear anywhere in the article.)
Look, you asked what the point of streams was. I pointed out what the metacircular source code does with streams.
If someone asks what the purpose of stdout is in Unix, it seems reasonable (and a hoary tradition) to justify it in terms of printing to screen. stdout is about much more than a screen, but "screen" is an easy answer to "why does my program need stdout?"