Various versions of the Lisp In Small Pieces interpreter -- in Coffeescript! #complete
Go to file
Elf M. Sternberg 5d9703aa33 [refactor] A new representation for symbols to handle quoted code
This is a big refactoring; the parser is now modal, to handle either
complex Node objects that carry around a lot of state with them, or
simpler objects that represent the McCarthy-style IST.  I'm still
feeling my way through the subject material.  The node construction
is such pure artifice I feel silly keeping it, and may end up revising
it (again).

The nice thing is, everything goes through evaluate.  Almost no other
code needs to know anything at all about the shape of the Nodes themselves;
it all makes assumptions based on the return value (or continuation passed)
by evaluate.
2015-07-27 21:27:21 -07:00
bin Coffeescript attempt. 2015-05-13 22:28:55 -07:00
chapter-lambda-1 [refactor] A new representation for symbols to handle quoted code 2015-07-27 21:27:21 -07:00
chapter1 [refactor] A new representation for symbols to handle quoted code 2015-07-27 21:27:21 -07:00
chapter3 [refactor] Custom reader types have unique Javascript equivalents now. 2015-07-24 07:44:04 -07:00
docs [docs] Updated blog message with addenda from site. 2015-07-08 15:16:59 -07:00
extras [docs] Including Jenkins configuration file 2015-07-07 20:27:11 -07:00
test [feat] Most throw/catch conditions work. 2015-07-21 16:16:13 -07:00
.gitignore [feat] Most throw/catch conditions work. 2015-07-21 16:16:13 -07:00
LICENSE Coffeescript attempt. 2015-05-13 22:28:55 -07:00
Makefile [refactor] Struggling to get self-evaluating components working. 2015-07-26 14:59:49 -07:00
README.md [docs] Updating the README to be more... well, just *more* 2015-07-07 20:19:04 -07:00
coffeelint.json [test] Coffeelint configuration file. 120 character line length is okay by me. 2015-07-08 15:06:06 -07:00
package.json [test] Added Coffeelint to list to of features. 2015-07-08 15:04:32 -07:00

README.md

A Collection of Interpreters from Lisp In Small Pieces, written in Coffeescript

Purpose

I don't know Lisp, so I figured the correct place to start was to write my own interpreter. After buying five different textbooks (The Structure and Interpretation of Computer Programs, aka "The Wizard Book", Friedman's The Essentials of Programming Languages, Let over Lambda, On Lisp, and one more) I decided Christian Quinnec's Lisp In Small Pieces gave the clearest step-by-step introduction.

Since I didn't know Lisp, my task was to translate what Quiennec wrote in his book into a language I did know: Javascript. Well, Coffeescript, which is basically Javascript with a lot of the syntactical noise removed, which is why I liked it.

Usage

I don't know if you're going to get much out of it, but the reader (which I had to write by hand, seeing as I didn't have a native Lisp reader on hand in my Javascripty environment), and each interpreter has a fairly standard test case that demonstrates that each language does what it says it does: you can do math, set variables, name and create functions, and even do recursion.

Notes

chapter-lambda-1 is not from Lisp In Small Pieces. It is a primitive CPS interpreter built on top of the interpreter from LiSP Chapter 1, using techniques derived from a fairly facile reading of Lisperator's "Implement A Programming Language in Javascript." But it was fun.

See the LICENSE file.