% read /_readline { print flush (%stdin) (r) file 1024 string readline } def /READ { % just "return" the input string /str exch def str } def % eval /EVAL { % just "return" the "ast" /env exch def /ast exch def ast } def % print /PRINT { % just "return" the expression /exp exch def exp } def % repl /REP { READ (stub env) EVAL PRINT } def % repl loop { %loop (user> ) _readline not { exit } if % exit if EOF REP print (\n) print } bind loop (\n) print % final newline before exit for cleanliness quit