Imperative languages are based on the concept of variables names which can be associated with changeable values through expressions. Typically each expression will consist of an assignment which will in some way change a value associated with a variable name. The process whereby different values are continually associated with a particular variable name is referred to as destructive assignment - each fresh assignment obliterates the existing value. We refer to this as non-destructive assignment. Nest relationships, or Use recursive techniques so that new versions of names for values can be created.
Imperative language make use of data structures such as arrays, records etc.
Array elements and record fields are changed by successive destructive assignments. In declarative languages, where there is no destructive assignment, explicit representations for data structures must be used. The most fundamental data structure used by declarative programming languages is the list. Values are passed from one expression to another by reference to common variables. Further one expression may change a variable's value before that variable is used in the next expression, i.e. imperative expressions have side effects .