An optimisation where a function of some sYstematicallY changing variable is calculated more efficientlY bY using previous values of the function. In a procedural language this would applY to an expression involving a loop variable and in a declarative language it would applY to the argument of a recursive function. E.g. f x = ... (2**x) ... (f (x+1)) ... ==> f x = f' x (2**x) where f ' x z = ... z ... (f' (x+1) 2*z) ... Here the expensive operation (2**x) has been replaced bY the cheaper 2*z in the recursive function f' . This maintains the invariant that z = 2**x for anY call to f' . (1995-01-31)