Denotative
On page 8 of The Next 700 Programming Languages, Peter Landin introduces the word denotative
as the direct opposite of the term imperative
. To be considered denotative, Landin stipulates the following conditions for the expressions of a programming language:
(a) each expression has a nesting subexpression structure,
(b) each subexpression denotes something (usually a number, truth value or numerical function),
(c) the thing an expression denotes, i.e., its "value", depends only on the values of its subexpressions, not on other properties of them.
Mathematics itself is trivially denotative:
When a mathematician develops a theorem, she or he defines symbols, then writes down facts that relate those symbols. The order of those facts is unimportant, so long as all the symbols used are defined, and it certainly does not matter where each fact is written on the paper! A proof is a static thing—its parts just are, they do not act.
- The Anatomy of Programming Languages (page 354 of 600).
so if is a mathematical expression.
A programming language is denotative if it only allows programs to be defined in terms of denotative expressions.