Umbenennung von lokalen Variablen

int x = 3;
int f(int y) { return x + y; }
int g(int x) { return (x + f(8)); }  
// g(5) => 16
Darf f(8) ersetzt werden durch f[y : = 8] ? - Nein:
int x = 3;
int g(int x) { return (x + (x+8)); }  
// g(5) => 18
Das freie x in (x + y) wird fälschlich gebunden.

Lösung: lokal umbenennen

int g(int z) { return (z + f(8)); }
dann ist Ersetzung erlaubt
int x = 3;
int g(int z) { return (z + (x+8)); }  
// g(5) => 16



Johannes Waldmann 2014-07-10