Lokale vs. globale variabelen

Variabelen gedefinieerd in een Maple worksheet zijn steeds globaal, ie. hun waarde kan gebruikt en gewijzigd worden in elke procedure of functie die gedefinieerd wordt. Hetzelfde geldt voor de procedures en functies zelf, ook deze kunnen door elke andere procedure of functie opgeroepen worden.

> A := 5;

[Maple Math]

> f1 := proc(x)
A*x
end:

> f1(2);

[Maple Math]

Indien men nu de waarde van de globale variabele verandert, dan zal een nieuwe functie-aanroep een ander resultaat opleveren:

> A := 3;

[Maple Math]

> f1(2);

[Maple Math]

> A := 'A': f1 := 'f1':

Als een procedure lokaal wordt gedefinieerd ten opzichte van een andere, dan is het gedrag van Maple analoog aan dat van een programmeertaal zoals Pascal.

> A := 5;

[Maple Math]

> f2 := proc(x)
local A, f1;
A := 3;
f1 := proc(y)
A*y
end;
f1(x/2)
end:

> f2(2);

[Maple Math]

De waarde van de globale variabele A is uiteraard niet gewijzigd.

> A;

[Maple Math]

> A := 'A': f2 := 'f2':

In de procedure f1 wordt de waarde van de lokale variabele A gebruikt, niet de globale waarde 5.

Het volgende geval lijkt analoog, maar is het duidelijk niet.

> A := 5;

[Maple Math]

> f1 := proc(x)
A*x
end:

> f1(2);

[Maple Math]

In een procedure die gebruik maakt van f1 wordt eveneens de waarde van de globale parameter A gebruikt

> f2 := proc(x)
f1(x/2)
end:

> f2(2);

[Maple Math]

Als A als lokale variabele in de procedure f2 gedeclareerd wordt dan zou men verwachten dat de waarde van de lokale variabele in f1 gebruikt wordt.

> f3 := proc(x)
local A;
A := 4;
f1(x/2)
end:

> f3(2);

[Maple Math]

Dit blijkt niet het geval te zijn, dit is echter normaal. De variabele A die gebruikt werd in de definitie van f1 was immers een globale variabele. De locale variabele A gedeclareerd in f3 is een andere variabele voor de procedure f1, de A in de procedure f1 verwijst nog steeds naar de globale variabele A.

> A := 'A': g1 := 'g1': g2 := 'g2': g3 := 'g3':

Illustratie: sommen en producten