Currently + is implemented as a special form. You could translate + to operator.add, treat it like a function, and obtain better generality. Also, lambda is not implemented. (The only functions are global ones using 'set'). Lambda is, in some sense, the essence of a Lisp; it seems like a reach to call this a Lisp compiler without lambda.
> it seems like a reach to call this a Lisp compiler without lambda.
I think that's a running gag when implementing "lisp." I can recall seeing some "lisp in javascript" library a while back that also neglected to implement that "minor detail."
Why? Python supports functions pretty well. So adding proper support for functions, like lambdas, can be done quite metacircularly; and thus in a very short code.
If that still takes to many lines for his challenge, leave out linked lists or arithmetic. Lambdas are more important in Lisp, and you can re-create both of them as a library in the language, if you have lambdas.
Fair enough. I really like this sort of post. It's intriguing to see people's interpretations of what a Lisp is, and what a compiler does, and 89 lines is short enough to digest the essence in a blog post.
I guess I should probably come up with my own Lisp implementation now :)