Up to now, everything we have done with Lisp has been done using what is called "pure" Lisp. That is, with a few minor exceptions, we have used Lisp as a pure applicative (or functional) programming language. In an applicative programming language, the only thing one can do is apply functions to their arguments and get back their values. Doing that does not change the environment of the programming system. After evaluating (cons 'a (rest '(x b c))), everything is the same as it would have been had we not done it. Some ways we have seen for changing the environment have included defining a function, turning tracing on or off, and changing packages with in-package. Changing the environment is called side-effecting. Functions like defun and in-package are used principally for their side effects rather than for their values. Although applicative programming has become more popular recently, Lisp, or rather the pure subset of Lisp, was the first applicative programming language.