[racket] Writing a toy interpreter. Need help solving this bootstrapping problem.

From: Patrick Li (patrickli.2001 at gmail.com)
Date: Wed Feb 16 23:07:49 EST 2011

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

(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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20110216/fd48181c/attachment.html>

Posted on the users mailing list.