Procedures

Als men meerdere statements na elkaar wil uitvoeren en gebruik maken van lokale variabelen voor het schrijven van veiliger programma's maakt men gebruik van procedures.

> Pyth := proc(x,y)
local r;
r := x^2 + y^2;
sqrt(r)
end;

[Maple Math]

Een procedure in Maple kan een willekeurig aantal Maple statements bevatten, inclusief definities van nieuwe (lokale) procedures of functies. In tegenstelling tot programmeertalen zoals Pascal gedragen procedures in Maple zich eigenlijk als functies, ze geven een waarde terug als ze aangeroepen worden. Deze waarde is die van het laatste statement dat uitgevoerd wordt. Het onderscheid tussen procedures en functies situeert zich vooral op het vlak van het ontwikkelen van libraries. Procedures lenen zich beter om robuste code te schrijven, zie hiervoor Types voor procedure parameters en Uitvoeringsfouten en 'Error'.

> Pyth(6,7);

[Maple Math]

De procedure 'Pyth' heeft twee parameters 'x' en 'y'. Het eerste statement 'local r' declareert de locale variabele 'r'. In het tweede statement wordt een berekening met 'x' en 'y' uitgevoerd, het resultaat van het laatste statement is de waarde die de procedure teruggeeft. Aangezien zowel 'x', 'y' als 'r' lokaal gedefinieerd zijn is aan deze variabelen nog steeds geen waarde toegekend op het niveau van het worksheet.

> x, y, r;

[Maple Math]

Indien men nu echter het 'local r' statement zou weglaten dan is Maple intelligent genoeg om zelf 'r' lokaal te maken.

> Pyth2 := proc(x,y)
r := x^2 + y^2;
sqrt(r)
end:

Warning, `r` is implicitly declared local

Het is echter in ieder geval te verkiezen zelf de 'local' declaratie te doen. Voor een grondiger discussie van dit onderwerp, zie de sectie Lokale vs. globale parameters.

In tegenstelling tot Pascal beschikt men in Maple over het 'RETURN' statement. Uitvoeren ervan heeft als gevolg dat de uitvoering van de procedure die het bevat onderbroken wordt en de waarde van de expressie die het argument van 'a' bevat als resultaat van de procedure teruggegeven wordt.

> Fact := proc(n)
if(n < 2) then
RETURN(1);
fi;
mul(i,i=2..n)
end:

Warning, `i` in call to `mul` is not local

> Fact(0), Fact(1), Fact(2), Fact(3);

[Maple Math]

> Pyth := 'Pyth': Pyth2 := 'Pyth2': Fact := 'Fact':