This page has two purposes: to describe how to implement computer language interpreters in general, and in particular to show how to implement a subset of the Scheme dialect of Lisp using Python . I call my language and interpreter Lispy ( lis.py ). Years ago, I showed how to write a Scheme interpreter in Java as well as one in Common Lisp . This time around the goal is to demonstrate, as concisely and accessibly as possible, what Alan Kay called "Maxwell's Equations of Software." Why does this matter? As Steve Yegge said , "If you don't know how compilers work, then you don't know how computers work." Yegge describes 8 problems that can be solved with compilers (or equally with interpreters, or with Yegge's typical heavy dosage of cynicism). The syntax of a language is the arrangement of characters to form correct statements or expressions; the semantics is the meaning ...