Definíció szerint a Maple-ben a típus egy olyan kifejezés, amelyet a type függvény felismer, és true vagy false értékkel, vagy esetleg más kifejezések értékével tér vissza.
A beépített adattípusok között megtalálhatók a különböző nyelvekben ismert elemi adattípusok és az ezekből képzett összetett adattípusok. Mindezek mellett különféle matematikai típusok is megtalálhatók.
Minden saját típus a következő négy kategóriába sorolható:
- Rendszertípus: Egy, a Maple rendszer kernelében definiált típusnév. Ide tartoznak a primitív algebrai típusok vagy adatstruktúrák,
pl.: integer, float, list, relation.
- Procedurális típus: A típus egy név, pl. xxx, és van egy procedúra: "type/xxx", amely elvégzi az argumentumok típusanalízisét, és visszaad egy true vagy false értéket. Ez a procedúra rendelkezésre állhat a globális Maple környezetből vagy függvénykönyvtárból is. Ezzel a módszerrel új típust lehet definiálni a Maple-ben.
- Hozzárendelt típus: A típus egy név, pl. xxx, és a globális név "type/xxx"-hez hozzárendelünk egy típuskifejezést. A típuskiértékelési mechanizmus ugyanúgy működik, mint a típusellenőrzés.
Pl.:
`type/intargs` := [algebraic, {name, name=algebraic..algebrai}];
. . . .
if not type([args],intargs) then ERROR (...)
- Strukturált típus: A típuskifejezés egy általános Maple kifejezés.
Egyszerű adattípusok
- Egészek (integer): Ide tartoznak az egy vagy több számjeggyel megadható előjeles számok. A számjegyek száma rendszerfüggő, akár 500 000-nél több számjegy is szerepelhet. A rendszer figyelmeztet, ha a szám kívül esik ezen az ábrázolható tartományon.
- Törtek (fraction): A törteket egész számpárokként ábrázolja a rendszer.
A racionális (rational) adattípus egy öszetett adattípus, amely egészet vagy törtet jelent.
- Lebegőpontos számok (float): Az ábrázolás alakja mantissza * 10^exponens, ahol a mantissza és az exponens is egészek. A mantissza hossza azonban nem rögzített, így a kívánt pontosságot a Digits környezeti változó értékével adhatjuk meg (pl.: Digits = 40).
- Komplex számok (complex): Egy komplex szám két racionális vagy két lebegőpontos számmal, a valós és képzetes résszel adható meg. Egy z komplex szám általános alakja a + I*b , ahol az I képzetes egység a rendszer konstansa.
- Sztringek (string): Egy kifejezés string típusú, ha számjegyek, betűk, ill. az aláhúzásjel nem számmal kezdődő véges sorozata, vagy bármilyen elérhető karaktersorozat hátradőlő idézőjelben. A string maximális hossza 499 karakter lehet. Minden olyan változó, amely nem kap értéket, a függvények, eljárások nevei string típusúak.
- Reláció (relation): A következő relációtípusok lehetnek: =, <>, <, <= (pl.: e = a <= b;)
Minden más egyenlőtlenséget a rendszer automatikusan ilyen alakúra konvertál.
- Logikai (boolean): A legegyszerűbb logikai kifejezések a true, a false és a FAIL. Ezekből operátorok segítségével képezhetünk összetett kifejezéseket, de logikai kifejezések lehetnek ez egyenletek, ill. egyenlőtlenségek, ha olyan környezetben használjuk őket (pl. értéket adunk a változóiknak).
- Tartomány (range): Kétoperandusú, (balkif .. jobbkif) alakú kifejezés. Segítségével bizonyos környezetben megadható, hogy a mellette szereplő változó végigfut az általa megadott tartományon.
(pl. s := seq(i, i = -1 .. 1) eredménye: s := -1, 0, 1)
Összetett adattípusok:
- Kifejezéssorozat (exprseq): Érvényes kifejezések sorozata vesszővel elválasztva (pl. s := 1,2,3,4,5;). Ez a típus az alapja a halmaz, a lista, a tömb és néhány más típusnak. Az üres sorozatot a NULL globális változó jelenti.
- Halmaz (set): Halmazt a { } jelek segítségével definiálhatunk (pl. a := {1,2,3};). A halmaz eleme bármilyen érvényes kifejezés lehet. Az üres halmazt a {} szimbólum jelöli. A halmazbeli elemek sorrendjét a rendszer határozza meg. Ha egy elemet többször felsorolunk, akkor azt a rendszer nem tekinti különbözőnek.
- Lista (list): A halmazhoz hasonló adattípus, amelyet a [ ] jelek között adhatunk meg. Lényeges különbség azonban, hogy a list elemeire indexszel hivatkozhatunk, és azonos elem többször is szerepelhet benne.
(pl. l := [1,2,1]; ekkor: l[1]=1, l[2]=2, l[3]=1)
- Tömb (array): Más nyelvekhez hasonlóan itt is lehetőség van többdimenziós tömbök létrehozására. Először az indextartományokat kell megadni, majd egy listában valamilyen módon felsorolhatjuk a tömb elemeit (pl. a := array(-1..0,0..1,[(-1,0)=x,(-1,1)=y,(0,0)=xx, (0,1)=yy]);). Ha nem soroljuk fel az elemeket, akkor azoknak később is értéket adhatunk (pl. a[-1,0] := z).
Lehetőség van speciális mátrixok (pl. szimmetrikus, ritka) kezelésére is, ha az array kulcsszó után, az indextartományok előtt megadjuk a mátrix típusát (pl. symmetric, spare).
- Vektor (vector) és mátrix (matrix): A tömbökhöz hasonló adatszerkezetek, azzal a megkötéssel, hogy indextartományuk kezdőértéke rögzítetten 1 (pl. v := vector[1,2,3]; m := matrix(3,2,[1,2,3,4,5,6]);).
Ezek a típusok a linalg csomagból érhetők el. A programcsomagot a with(linalg); paranccsal tölthetjük be.
Változók, konstansok
Egy változó a program futása során többféle szerepet játszhat:
lehet formális változó, ami felvehet nem numerikus, ill. numerikus értéket
egyaránt, majd ismét vissza lehet alakítani formális változóvá. A formális
változók megengedése matematikai szempontból nagy bővítést jelent, mert a
formális változó bármilyen matematikai objektum lehet: halmaz, vektor, mátrix,
függvény stb. A különböző matematikai objektumok között műveleteket is
definiálhatunk, így lehetővé teszi a nyelv, hogy tetszőleges matematikai
struktúrára megtanítsuk.
Szép számmal vannak beépített globális
konstansok, előredefiniált literálok; az operációs rendszer változói közül
is sok elérhető.
Néhány fontosabb ezek közül:
- true, false, FAIL (a háromértékű logika konstansai)
- I (képzetes egész)
- Pi
- infinity (végtelen)
- NULL (üres utasítás)
- Digits (lebegőpontos számok pontossága)
Globális - lokális probléma
A Maple a C-hez hasonlóan nem blokkstrukturált nyelv.
A programozó által az eljárások és a függvények törzsében lévő se nem globális, se nem lokálisnak deklarált változókat a Maple warning kíséretében implicit módon lokálisnak deklarálja. Ha globális változóra akarunk hivatkozni a procedúra törzsében, akkor a változónkat globálisnak kell deklarálni a deklarációs részben (a procedúra neve után).
Kifejezések, operátorok
A Maple rendszer által ismert aritmetikai kifejezések
felépítése hasonlít a más programnyelvekben megismertekhez. A legfontosabb
matematikai függvények beépítettként érhetők el, de a Maple sokkal több
függvényt ismer (pl. ortogonális polinomok, számelméleti függvények,
elliptikus integrálok stb.), amelyek azonban általában külön könyvtárban
vannak, tehát ezeket használatuk előtt be kell tölteni a memóriába. A beépített
függvények előnye az, hogy ismeri azok differenciálhányadosát és integráljait
is, míg újabb függvénydefiníciók esetében azokra is meg kell tanítani a
rendszert, de ez nem okoz nagy nehézséget.
A Maple a matematikai jelleg miatt nagy számú beépített operátorral rendelkezik. Ezek az operandusok szerint csoportosítva a következők:
- 1. Algebrai operátorok:
. (tizedespont), ! (faktoriális), +, -, *, &* (nem kommutatív szorzás), /, ** és ^ (hatvány),
@ (függvénykompozíció), @@ (kompozíció adott számú ismételt végrehajtása), mod (maradékképzés)
- 2. Reláció és logikai operátorok:
<, <=, >, >=, =, <>
- 3. Halmazoperátorok:
=, union, minus, intersect, member
- 4. Funkcionális operátorok: (függvénykapcsolat megadására)
(változók) -> eredmény