This is my first Clojure program — a port of a Scheme program I wrote a while back. It generates random expression trees and renders them as greyscale images. There is support to mutate and mix expression trees.
A few favorites:
Should Combined-Object-Lambda-Architecture really be Combined-Lambda-Object-Architecture?
Ian Piumarta’s IDST bootstraps a object-system, then a compiler, then a lisp evaluator. Maru bootstraps a lisp evaluator, then crafts an object system, then a compiler. Maru is much smaller and elegant than IDST.
Are object systems necessarily more complex than lambda evaluators? Or is this just another demonstration of how Lisp code/data unification is more powerful?
If message send and function calls are decomposed into lookup() and apply(), the only difference between basic OO message-passing and function calling is lookup(): the former is late-bound, the latter is early bound (in the link-editor, for example). Is OO lookup() the sole complicating factor? Is a lambda-oriented compiler fundamentally less complex than a OO compiler?