A functional programming language is based on the evaluation of expressions built out of function calls that resemble pure mathematical functions. Its goal is not to mimic the underlying machine for the sake of efficiency but to strive for mathematical elegance. They cannot change any values in other functions. Most Functional languages are not completely pure. Functional languages usually use function calls instead of assignment whenever a new value is needed and recursion instead of loops.
Functions are first-class citizens in that they can be treated just like other values.
Automatic Garbage Collection. Lists are the basic data structure. They are dynamic. ML is another functional language. Note that imperative languages focus on efficiency.