[racket] Writing a toy interpreter. Need help solving this bootstrapping problem.
Hello everyone,
I'm writing a toy Scheme-ish interpreter for fun, and am trying to add some
Smalltalk flavor to my Scheme system. I'm running into a bootstrapping
problem though, and would like to ask someone for a nudge in the right
direction.
(1) I want symbols to be represented as Functions.
ie. I want to be able to do this:
('my-symbol 'length) returns 9
('my-symbol 'equals 'my-symbol2) returns false
(2) I want symbols to be created by calling the function SYMBOL:
(SYMBOL 'new <internal-symbol-representation>) returns a new function
representing a symbol
(3) I want users to be able to override the built-in SYMBOL function.
(define SYMBOL (lambda args .... new symbol definition ....))
I can't seem to write a system like this without falling into an infinite
loop somewhere.
For example this is the last one that I ran into:
i. (quote asdf) is a special form that should create a symbol by calling
(SYMBOL 'new <internal-object-which-represents-asdf>)
ii. But doing that requires creating the 'new symbol
iii. Creating the 'new symbol requires calling
(SYMBOL 'new <internal-object-which-represents-new>)
iv. But doing that requires creating the 'new symbol
and so on.
I apologize if this seems unclear. Please ask me for clarifications if I
didn't explain myself properly. I have been stuck on this sort of problem
for a while now, and can't wrap my head around it.
-Patrick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20110216/fd48181c/attachment.html>