some ideas for the future: - things specific to this repl: - saving & loading repl sessions somehow - collections of broadly useful functions that can be loaded into the repl - optimization: - lazy evaluation - recognizing when reducing a term forms an endless loop and stopping reduction of that term - trampolining for reduction to prevent stack overflow - memoization - some more efficient way of storing & reducing functions based on finding expressions that occur in several parts of a program? probably related to the above