Design bug in the language
(Temporary) solution
- Handle those reserved identifiers in a special way.
- When we convert strings to symbols of reserved identifiers, we do not try to find them in a symbol table.
- But we rather directly map them to symbols in environment.
(define (string->symbol x)
(cond
((equal? x "$$rib")
'$$rib)
...
(else
(let ((pair (member x symbol-table (lambda (x y) (equal? x (symbol->string y))))))
...))))