A Mathematica programozási nyelv

Vezérlési szerkezetek

Értékadás

Az értékadás lehetséges formái az azonnali és a késleltetett lokális értékadás, amelyet a -> és az :> jelsorozattal adunk meg, a kifejezés hatáskörében helyettesíti ki a megadott értéket, valamint a globális értékadás, amely szintén lehet azonnali (=, ez felel meg az érték szerinti értékadásnak) és késleltetett (:=, ez felel meg a referencia szerinti értékadásnak).

Szekvencia

Sequence[ ut1, ut2, ut3, ...] formában adható meg, vagy (ut1; ut2; ut3, ...) egyszerűsített formában.

Elágazás

Elágazásnak a Mathematicában nem csak a hagyományos értelemben vett elágazások tekinthetők, hanem azok a függvények is, amelyek egy lista elemeiből "válogatnak" elemeket, mivel a lista elemei is lehetnek végrehajtható kifejezések.

If[ feltétel, haigaz, hahamis, haegyiksem ], hatására ha "feltétel" igaz, akkor a "haigaz" ágat értékeli ki, ha hamis, akkor a "hahamis" egybként (vagyis, ha nem eldönthető) akkor a "haegyiksem" ágat.

Which[ feltétel1, utasítás1, feltétel2, utasítás2, ...] balról jobbra értékeli ki, az ahhoz a feltételhez tartozó utasítást hajtja végre, amelyik feltétele először igaz lesz.

Switch[ kifejezés, érték1, utasítás1, érték2, utasítás2, ...] azt az utasítást értékeli ki, amelyhez tartozó értéknek balról jobbra kiértékelve "kifejezés" értéke megfelel.

Select[ lista, feltétel, limit ] "lista" elemi azokat adja egy listában, amelyek "feltétel"-nek megfelelnek, de legfeljebb az első "limit"-nyit.

Cases[ lista, mintázat ] "listá"-ból a "mintázat"-hoz illeszkedő elemeket adja egy listában.

Ciklus

Iterátoroknak a { változó [, alsókorlát], felsőkorlát [, lépés] } alakú kifejezéseket nevezzük. Sem az alsó korlát, sem a lépésköz megadása nem kötelező, alapértelmezett értéke 1.

Do[ kifejezés, iterátor ] "iterátor" minden értékére végrehajtja "kifejezést".

For[ változó = kezdőérték, kifejezés, növekmény, törzs ] elől tesztelő ciklus, "változó" értékét növeli a "növekmény"-nyel (ennek szintaxisa olyan, mint a C programozási nyelvben) és végrehajta "törzs"-et, amíg "kifejezés" igaz nem lesz.

While[ kifejezés, törzs ] szintén elől tesztelő, "törzs"-et hajtja végre, amíg "kifejezés" igaz nem lesz.

Ezen felül a ciklusnak tekinthetők azok a függvények, amelyek egy lista minden elemére végrehajtanak egy kifejezést, ilyen például a Map.

Goto

A Mathematicában is van feltétel nélküli ugrás, a Label[x], Goto[x] páros használatával. Ezen felül ciklusok esetén használható a Break és a Continue is.

Alprogramok

Alprogramok létrehozására a Module, With és Block függvény használható, illetve alprogram definiálható oly módon, hogy egy szimbólum definíciójaként egy tetszőleges kifejezést adunk meg. Alprogramnak, függvénynek, illetve tetszőleges szimbólumnak lehetnek paraméterei. Egy szimbólum paramétereit [ ] zárójelpár között kell felsorolni. A zárójelek közötti szimbólumokra a kifejezésben lehet hivatkozni. Lehetőség van a paraméterek között mintázat, illetve konstans érték megadására, ugyanaz a szimbólum több különböző mintázattal is definiálható. Az aktuális paramétert a Mathematica a formális paraméterhez illeszti, ez alapján dönti el, hogy a kifejezés melyik változatát kell kiértékelni, illetve az aktuális paramétereket hogyan kell a formális paramétereknek megfeleltetni (bővebben lásd Mintázatok című szakasz). Aktuális paraméter tetszőleges kifejezés lehet.

A Module, With, Block utasítások a változók hatáskörét korlátozzák:

Module esetén az első paraméterben fel kell sorolni a lokális változókat. Ha ezek ütköznek valamilyen változóval, amelynek a hatáskörében van a Module, akkor a Mathematica az ütköző (külső blokkban lévő) változót a blokk hatáskörében átnevezi, a nevét egy $ jellel egészíti ki.

Block működése a Modulehoz hasonló, azonban más mélységben helyettesíti a változókat. A kettő különbségére álljon itt egy példa:

With első paramétere lokális konstansokból álló lista, amelyeket a második paraméterben megadott kifejezésben kihelyettesít.

> m = i^2 i^2 >Block[ { i = a } , i + m ] a + a^2 >Module[ { i = a } , i + m ] a + i^2

Alprogramok típussal való paraméterezésére nincs külön konstrukció, a gyenge típusosság azonban számos lehetőséget ad ennek megvalósítására.