A micro manual for Lisp - Not the whole truth (McCarthy, 1978)
ee.ryerson.ca
ee.ryerson.ca
EDIT: I also implemented simple mark-and-sweep garbage collector - otherwise you will be running out of memory pretty quick.
I still have code printed in the hardcopy (which was requirement of my college), but floppy disks with the source code didn't survived ;)
Eval is not that straightforward, though -- you have to implement tail-call elimination and call-with-current-continuation for scheme.
Supposedly, McCarthy had never intended his definitions of EVAL and APPLY -- not in this "micro-manual", but in his original Lisp paper -- to be actually implemented. Some guy called S R Russell (I imagine him as a graduate student but have never checked) looked at the paper and thought "wait, we can type this code in, write a bit of supporting code, and get an actual Lisp implementation", and so history was made.
Steve Russell said, look, why don't I program this eval..., and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into [IBM] 704 machine code, fixing bugs, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today....
(Source: http://www.paulgraham.com/icad.html - not really surprising)
I have a wonderful one just across the street from home. With a Pringles can I could do it from my bedrom ;-)
Wanna try, pg? We can always access the Pringles from a remote location.
I think it's important to realise that, if you are opposed (as mahmud (http://news.ycombinator.com/item?id=1591586) is, for example) to paying for this content, that you are not bypassing the paywalls, but, rather, taking advantage of the university's having already paid its way through them.
(To be clear, I think that it's a perfectly reasonable thing to do; just that it's important to realise that nothing is being ‘bypassed’ per se. I also think you're very lucky to be near a university with an open network—all that I know now require authentication.)
A meta-circular evaluator is a special case of a self-interpreter in which the existing facilities of the parent interpreter are directly applied to the source code being interpreted, without any need for additional implementation. Meta-circular evaluation is most common in the context of homoiconic languages.
The idea goes back at least to the definition of Lisp 1.5 (1961) by John McCarthy[1]. He describes the evaluation rules of Lisp as a Lisp program.
Google for LispKit and you'll find out probably as much as I knew back then. I read the book during the week, then implemented it all in about 24 hours over Saturday and Sunday. Run first time.
Never did anything with it, though ...
At least for me, when either using one of the lightweight PDF-viewers or using Chrome's built-in PDF viewer (absolutely fantastic, very fast and smooth).