[plt-scheme] Stylistic (I hope!) question regarding driver loop
I thought I might try experimenting with the "meta-circular"
interpreter in SICP, perhaps implementing lazy evaluation rules or
other language modifications. Well, I put together a little driver
loop using letrec
(letrec
((main-loop
(lambda ()
(begin
(display ">> ")
(let ((input-exp (read)))
(unless (equal? input-exp '(exit))
(let ((the-value
(evaluate input-exp)))
(begin
(display the-value)
(newline)))
(main-loop))))))
(evaluate
(lambda (x) x)))
(main-loop))
and it seems to work just fine. My first concern was that a construct
like this would chew up stack space, but then I thought it was just
tail recursion so it shouldn't matter. But then I wonder if placing a
call to main-loop in the body of a letrec like that makes any
difference. Is this safe? Is there a better way to write it?
===
Gregory Woodhouse
gregory.woodhouse at sbcglobal.net
"All truth passes through three stages: First, it is
ridiculed. Second, it is violently opposed. Third,
it is accepted as being self-evident."
--Arthur Schopenhaur