The features of programming languages can be divided usefully into two categories: applicative features and imperative features.

Applicative features: expression evaluation and the definition and application of functions.

[0] Reynolds, John C. “Definitional interpreters for higher-order programming languages.” Higher-order and symbolic computation 11.4 (1998): 363-397.