Technical Reports

The ICICS/CS Reading Room

UBC CS TR-95-23 Summary

Pure versus Impure Lisp, October 1995 Nicholas Pippernger, 11 pages

The aspect of purity versus impurity that we address involves the absence versus presence of mutation: the use of primitives (RPLACA and RPLACD in Lisp, set-car! and set-cdr! in Scheme) that change the state of pairs without creating new pairs. It is well known that cyclic list structures can be created by impure programs, but not by pure ones. In this sense, impure Lisp is ``more powerful'' than pure Lisp. If the inputs and outputs of programs are restricted to be sequences of atomic symbols, however, this difference in computability disappears. We shall show that if the temporal sequence of input and output operations must be maintained (that is, if computations must be ``on-line''), then a difference in complexity remains: for a pure program to do what an impure program does in n steps, O(n log n) steps are sufficient, and in some cases Omega(n log n) steps are necessary.

If you have any questions or comments regarding this page please send mail to