sapid lisp is a lisp interpreter with the following features:
  • dynamic binding
  • different name spaces for symbol values and functions
  • tail recursion and mutual recursion optimization
  • currently two implementations: one in python, a second one in sapid lisp itself. Both implementations share the same lisp modules and testing environment.
  • most functions are written in lisp
  • limited environment: trace, pretty print, help, testing
No more reasons to choose those features than the fact I studied to write a lisp interpreter this way.

The most interesting features is perhaps the way tail recursion optimization is coded with exceptions. This makes natural and easy to transform a non tail recursion optimized interpreter into an optimized one.

Source code repository here.