What is a “purely functional” programming language?
This question has been the subject of some debate in the functional programming community. It is widely agreed that languages such as Haskell and Miranda are “purely functional”, while SML and Scheme are not. However, there are some small differences of opinion about the precise technical motivation for this distinction. One definition that has been suggested is as follows: The term “purely functional” is often used to describe languages that perform all their computations via function application. This is in contrast to languages, such as Scheme and Standard ML, that are predominantly functional but also allow `side effects’ (computational effects caused by expression evaluation that persist after the evaluation is completed). Sometimes, the term “purely functional” is also used in a broader sense to mean languages that might incorporate computational effects, but without altering the notion of `function’ (as evidenced by the fact that the essential properties of functions are preserv