First and foremost: NACK ON THE ONE-CHARACTER NAMES (the =
+
etc get a pass, but not crap like q
, a
, x
…). Just give the proper names quote
, apply
, etc. Good call on 'foo
though. Lisp also has quasiquotation `(foo ,(cons '1 'nil))
syntax, maybe could use it as a shorthand for some combination of apply
and bintree
with automatic quotation? Sure this is a compilation target but making it more readable so you can more easily debug a compiler without losing too much hair is always better.
Alternatively, go the Haskell route and mandate everything be lazily evaluated all the time. The interpreter can evaluate strictly but only if it does not diverge from the lazy-evaluation order.