Said of a language that lacks the ability to mutate data structures. Proponents claim that this makes programs easier to reason about and easier for the compiler to optimize. FirstClassFunctions and TailCallOptimization are often provided. All procedures are functions in the sense that given the same input, they will always produce the same output. Examples include HaskellLanguage and ErlangLanguage.
See also PurelyFunctionalDataStructures, PureFunctionalLanguage