Jim is an assistant professor at EPITA Research Lab and long time Lisp programmer (Common Lisp and other Lisp dialects, SKILL++ in particular). Recent work includes extending the Common Lisp type system to support heterogeneous sequence types. This work combines several research topics: Dynamic Languages, Symbolic Finite Automata, Binary Decision Diagrams, and Meta-Programming.
In this article we examine the computation order and consequent performance of three different conceptual implementations of the fold function. We explore a set of performance based experiments on different implementations of this function. In particular, we contrast the fold-left implementation with two other implements we refer to as pair-wise-fold and tree-like-fold. We explore two application areas: ratio arithmetic and Binary Decisions Diagram construction. We demonstrate several cases where the performance of certain algorithms is very different depending on the approach taken. In particular iterative computations where the object size accumulates are good candidates for the tree-like-fold.