A Maple programozási nyelv

Alprogramok, modulok

Sokszor szükség van rá, hogy ismétlődő utasítássorozatokat egy egységként, egy névvel elindítva tudjuk használni. Ezt, az ún. eljárások definiálását minden programnyelv biztosítja, így a Maple is. Eljárások és függvények között annyi a különbség, hogy az eljárásnak nincs visszatérési értéke.
A hagyományos programozási nyelvekhez hasonlóan a Maple eljárásokban is használhatunk lokális változókat. Ezeknek a deklarálását közvetlenül az eljárásfej után kell megtenni local változólista; formában, ahol a változólista Maple nevek sorozata. Természetesen nem kell lokális változó típusát deklarálni, hisz ez függhet az argumentumok típusától.

Szintaxis


proc_name := proc([argseq]) [local nseq;] [global nseq;] [options nseq;] [description stringseq;]

statseq

end proc;

argseq ::= [variable_name [:: type]]*



Speciális függvényoperátor:

vars -> result

Pl.:
x -> x^2

Paraméterátadás

A paraméterek átadása igen speciális, ún. "kiértékelt név" szerinti átadás történik. Igazából ez a fajta paraméterátadás teszi képessé a Maple-t a szimbolikus matematikai számítások elvégzésére, általános képletek gyártására.

Minden formális paraméter először kiértékelődik (érték szerinti hívás), majd a rendszer alkalmazza a helyettesítési szabályt: minden formális paramétert helyettesít a neki megfelelő aktuális paraméterrel (név szerinti hívás).

A paraméter típusát nem feltétlenül kell definiálni az átadás előtt; alkalmas a Maple arra is, hogy ne egyetlen értéket vagy több értéket adjunk meg paraméterként, formulákra is helyes eredményt ad.

Ha felesleges paramétereket is megadunk a paraméterlistában, akkor a plusz értékeket az eljárás nem veszi figyelembe; viszont ha a kelleténél kevesebb paraméter kerül átadásra, az hibát okoz.

Egy példa

Meghívása: summ(dx, d+2); ahol: dx = [x,y,z], d = 3.

Nos ekkor az eredmény: x+y+z+x^2+y^2+z^2+x^3+y^3+z^3+x^4+y^4+z^4+x^5+y^5+z^5.

Ha most értéket adunk az egyik változónak (pl.: x = 3), akkor az eredmény: 363+y+z+y^2+z^2+y^3+z^3+y^4+z^4+y^5+z^5.

Pár szót ejtsünk a visszatérési értékről. A RETURN itt egy standard függvény, amely biztosítja a procedúrából való explicit visszatérést. A paraméter lehet üres, de tetszőleges kifejezés is visszaadható. Előfordulhat, hogy nem tud mindent kiértékelni a függvény; ekkor a "fail return" forma alkalmazódik, amely azt jelenti, hogy a függvény a proc_név(aktuális_paraméterek) formával tér vissza. Ha a számolás végképp elakad a függvény törzsében, akkor FAIL értékkel tér vissza a függvény.

Ha nem a RETURN segítségével térünk vissza, akkor az eljárást lezáró end proc előtti utolsó érték lesz a visszatérési érték. Erre jó vigyázni, mert nem biztos, hogy gondolunk erre a lehetőségre. Célszerű ezért az esetek többségében visszatérési érték megadása, mert így elkerülhetjük a figyelmetlenségből adódó hibákat.


Rekurzió

A Maple programozási nyelv megengedi a rekurzív definíciókat is, azaz például faktoriálist a következő módon számolhatunk:

   fakt := proc(n)
   if (n = 1) then RETURN(1)
   else RETURN(n*fakt(n-1))
   end if;
  end proc;


A rekurzív definíció gyakran szemléletesebb, mint a hagyományos, de általában tárigényesebb és lassabb. Néhány feladat (nem a faktoriálisszámolás) azonban rekurzió nélkül nagyon nehezen lenne programozható.