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

From: Patrick Li (patrickli.2001 at gmail.com)
Date: Thu Feb 17 09:11:46 EST 2011

Thanks for the help. I shall read through AMOP in more detail and see if I
can get some hints from that.
  -Patrick

On Wed, Feb 16, 2011 at 11:25 PM, Hendrik Boom <hendrik at topoi.pooq.com>wrote:

> On Wed, Feb 16, 2011 at 11:07:49PM -0500, Patrick Li wrote:
> > 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
>
> When you find you need to have implemented something in order to
> implement itself within your sustem, it's a strong clue that it has to
> be built into the system, rather than built on top of it..  In this
> case, the symbol 'new, will have to be in the system to stat with, i.e.,
> written in whatever othe system you bootstrap from.
>
> -- hendrik
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20110217/ce14a86c/attachment.html>

Posted on the users mailing list.