Komputeralgebra rendszerek Haladó programozás Czirbusz Sándor czirbusz@gmail.com Komputeralgebra Tanszék ELTE Informatika Kar 2009-2010 ősz
Index 1 Procedúrák, változók, a Maple kiterjesztése Egymásba ágyazott procedúrák "Apróságok" 2 Modulok Célok Szintaxis Modultest, információkérés Opciók, egyebek Modultípusok A use utasítás 3 Összekapcsolhatóság 4 Programtesztelés Debug trace Kivételkezelés Szintaktikai ellenőrzés Egyebek
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei 2 A belső procedúra lokális/globális változói
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei 2 A belső procedúra lokális/globális változói 3 A külső eljárás praméterei
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei 2 A belső procedúra lokális/globális változói 3 A külső eljárás praméterei 4 A külső eljárás lokális/globális változói
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei 2 A belső procedúra lokális/globális változói 3 A külső eljárás praméterei 4 A külső eljárás lokális/globális változói 5 A külső procedúrák implicit lokális változói
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei 2 A belső procedúra lokális/globális változói 3 A külső eljárás praméterei 4 A külső eljárás lokális/globális változói 5 A külső procedúrák implicit lokális változói Kiegészítő szabályok
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei 2 A belső procedúra lokális/globális változói 3 A külső eljárás praméterei 4 A külső eljárás lokális/globális változói 5 A külső procedúrák implicit lokális változói Kiegészítő szabályok A for kontrollváltozója, illetve explicit értékadás baloldali változója lokális
Egymásba ágyazott procedúrák Egymásba ágyazott procedúrák A változók hatáskörének megállapítása 1 A belső procedúra paraméterei 2 A belső procedúra lokális/globális változói 3 A külső eljárás praméterei 4 A külső eljárás lokális/globális változói 5 A külső procedúrák implicit lokális változói Kiegészítő szabályok A for kontrollváltozója, illetve explicit értékadás baloldali változója lokális Minden más változó globális
"Apróságok" "Apróságok" Procedúrák melyek visszaadott értéke procedúra : "gyári" procedúrák, pl.dsolve mi is készíthetünk
"Apróságok" "Apróságok" Procedúrák melyek visszaadott értéke procedúra : "gyári" procedúrák, pl.dsolve mi is készíthetünk Lokális változól élettartama : a procedúra befejeztéig
"Apróságok" "Apróságok" Procedúrák melyek visszaadott értéke procedúra : "gyári" procedúrák, pl.dsolve mi is készíthetünk Lokális változól élettartama : a procedúra befejeztéig Interaktív input : readline(file) Ha a file=terminal, egy sort kér tőlünk. A parse konvertálja kifejezéssé.
"Apróságok" "Apróságok" Procedúrák melyek visszaadott értéke procedúra : "gyári" procedúrák, pl.dsolve mi is készíthetünk Lokális változól élettartama : a procedúra befejeztéig Interaktív input : readline(file) Ha a file=terminal, egy sort kér tőlünk. A parse konvertálja kifejezéssé. Kifejezés bevitele : readstat(prompt)
"Apróságok" "Apróságok" Procedúrák melyek visszaadott értéke procedúra : "gyári" procedúrák, pl.dsolve mi is készíthetünk Lokális változól élettartama : a procedúra befejeztéig Interaktív input : readline(file) Ha a file=terminal, egy sort kér tőlünk. A parse konvertálja kifejezéssé. Kifejezés bevitele : readstat(prompt) Új típus definiálása : type/újtípus :=kifejezés (többnyire procedúra)
"Apróságok" "Apróságok" Procedúrák melyek visszaadott értéke procedúra : "gyári" procedúrák, pl.dsolve mi is készíthetünk Lokális változól élettartama : a procedúra befejeztéig Interaktív input : readline(file) Ha a file=terminal, egy sort kér tőlünk. A parse konvertálja kifejezéssé. Kifejezés bevitele : readstat(prompt) Új típus definiálása : type/újtípus :=kifejezés (többnyire procedúra) Semleges operátorok : &operátor
"Apróságok" "Apróságok" Procedúrák melyek visszaadott értéke procedúra : "gyári" procedúrák, pl.dsolve mi is készíthetünk Lokális változól élettartama : a procedúra befejeztéig Interaktív input : readline(file) Ha a file=terminal, egy sort kér tőlünk. A parse konvertálja kifejezéssé. Kifejezés bevitele : readstat(prompt) Új típus definiálása : type/újtípus :=kifejezés (többnyire procedúra) Semleges operátorok : &operátor Parancsok kiterjesztése : proc/típus :=proc... userinfo(string) Tájékoztató a folyamatról
Célok Célok Csomagok írása
Célok Célok Csomagok írása Objektum modellezés
Célok Célok Csomagok írása Objektum modellezés Portábilitás
Szintaxis Szintaxis module() local L ; export E ; global G ; options O ; description D ; Body end module A module() end module kivételével minden opcionális. Alkalmazás : name:=module()...end module Vagy : modul name()... end module (Nem vehet részt értékadásban) Hivatkozásoknál írásképben megkülönbözteti a Maple a kettőt.
Modultest, információkérés Modultest, információkérés Modultest : Maple utasítássorozat,lehet üres Nem lehet break, next benne.
Modultest, információkérés Modultest, információkérés Modultest : Maple utasítássorozat,lehet üres Nem lehet break, next benne. A thismodule hivatkozás
Modultest, információkérés Modultest, információkérés Modultest : Maple utasítássorozat,lehet üres Nem lehet break, next benne. A thismodule hivatkozás export elérése. modulkif:-exportnév.
Modultest, információkérés Modultest, információkérés Modultest : Maple utasítássorozat,lehet üres Nem lehet break, next benne. A thismodule hivatkozás export elérése. modulkif:-exportnév. Nevük lekérdezhető az exports(modulnév), exports(modulnév, instance )vagy hívatkozással.
Modultest, információkérés Modultest, információkérés Modultest : Maple utasítássorozat,lehet üres Nem lehet break, next benne. A thismodule hivatkozás export elérése. modulkif:-exportnév. Nevük lekérdezhető az exports(modulnév), exports(modulnév, instance )vagy hívatkozással. A member(modul, név) teszteli a tartalmazást.
Opciók, egyebek Opciók load=proc és unload=proc : Híváskor/törléskor végreahjtódó procedúra.
Opciók, egyebek Opciók load=proc és unload=proc : Híváskor/törléskor végreahjtódó procedúra. package
Opciók, egyebek Opciók load=proc és unload=proc : Híváskor/törléskor végreahjtódó procedúra. package record
Opciók, egyebek Opciók load=proc és unload=proc : Híváskor/törléskor végreahjtódó procedúra. package record Hatáskörök, egymásbaágyazás : minta a procedúráknál.
Opciók, egyebek Opciók load=proc és unload=proc : Híváskor/törléskor végreahjtódó procedúra. package record Hatáskörök, egymásbaágyazás : minta a procedúráknál. Paraméterezett modul (generikus modul) : procedúrába ágyazva (pl modulo aritmetika) (Lényegében konstruktor)
Opciók, egyebek Opciók load=proc és unload=proc : Híváskor/törléskor végreahjtódó procedúra. package record Hatáskörök, egymásbaágyazás : minta a procedúráknál. Paraméterezett modul (generikus modul) : procedúrába ágyazva (pl modulo aritmetika) (Lényegében konstruktor) Típusok : a modul egyben típus is, a defíníciója pedig moduldefinition típus
Modultípusok Modultípusok record
Modultípusok Modultípusok record package - ez az új trendi. A :- hívatkozás bal-asszociatív
A use utasítás A use utasítás Nemcsak moduloknál használjuk (Pascal width) use environment in body end use;
Összekapcsolhatóság Külső - C, FORTRAN - eljárás hívása Maple-ból
Összekapcsolhatóság Külső - C, FORTRAN - eljárás hívása Maple-ból OpenMaple : Maple eljárások hívása más nyelvből.
Debug Debug Sorszámkijelzés : showstat(proc)
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám)
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám) prompt :DBG>
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám) prompt :DBG> parancsok : next, step, showstat, list, outfrom, cont, quit, where, showstop
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám) prompt :DBG> parancsok : next, step, showstat, list, outfrom, cont, quit, where, showstop watchpoint : stopwhen([proc,var]), unstopwhen()
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám) prompt :DBG> parancsok : next, step, showstat, list, outfrom, cont, quit, where, showstop watchpoint : stopwhen([proc,var]), unstopwhen() Explicit meghívás procedúrából : DEBUG(arg)
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám) prompt :DBG> parancsok : next, step, showstat, list, outfrom, cont, quit, where, showstop watchpoint : stopwhen([proc,var]), unstopwhen() Explicit meghívás procedúrából : DEBUG(arg) stoperror(string) a figyelt hiba jelzése Speciális nevek :
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám) prompt :DBG> parancsok : next, step, showstat, list, outfrom, cont, quit, where, showstop watchpoint : stopwhen([proc,var]), unstopwhen() Explicit meghívás procedúrából : DEBUG(arg) stoperror(string) a figyelt hiba jelzése Speciális nevek : all bármilyen olyan hibánál, amelyik nincs a try konstrukcióban
Debug Debug Sorszámkijelzés : showstat(proc) Breakpoint : stopat(proc,sorszám, cond) átmegy debug módba A sorszám és a feltétel opcionális Visszavonása : unstopat(proc, sorszám) prompt :DBG> parancsok : next, step, showstat, list, outfrom, cont, quit, where, showstop watchpoint : stopwhen([proc,var]), unstopwhen() Explicit meghívás procedúrából : DEBUG(arg) stoperror(string) a figyelt hiba jelzése Speciális nevek : all bármilyen olyan hibánál, amelyik nincs a try konstrukcióban traperror
trace trace printlevel=n
trace trace printlevel=n trace(proclist)
trace trace printlevel=n trace(proclist) untrace(proclist)
trace trace printlevel=n trace(proclist) untrace(proclist) ASSERT(felt, üzenet) kernelopts(assert=true) a bekapcsolása
trace trace printlevel=n trace(proclist) untrace(proclist) ASSERT(felt, üzenet) kernelopts(assert=true) a bekapcsolása WARNING(üzenet,par1,par2,...), interface(warnlevel=n)
Kivételkezelés Kivételkezelés try catch finally Üzenet : error(string1,string2,...)
Szintaktikai ellenőrzés Szintaktikai ellenőrzés maplemint(proc)
Egyebek Egyebek showtime(), kikapcsolása : off
Egyebek Egyebek showtime(), kikapcsolása : off time()
Egyebek Egyebek showtime(), kikapcsolása : off time() profile(procs), showprofile(procs), unprofile(procs)
Egyebek Egyebek showtime(), kikapcsolása : off time() profile(procs), showprofile(procs), unprofile(procs) timelimit(time, expr)
Egyebek Egyebek showtime(), kikapcsolása : off time() profile(procs), showprofile(procs), unprofile(procs) timelimit(time, expr) gc() garbage collection