Es un problema típico en la programación estructurada que fue afrontado por el paradigma funcional. Se basa en el problema de utilizar variables globales que serán modificadas por uno o más métodos.
int x=0;
function foo(int y)
{
x++;
return x+y;
}
{
x++;
return x+y;
}
Esto implica que llamar a un método varias veces, con los mismos parámetros de entrada, provocará resultados diferentes.
foo(3) = 3
foo(3) = 4
foo(3) = 5
Esto no sucede en el paradigma funcional que tiene como premisa la transparencia referencial.