"Elméleti" tételek a Deklaratív programozás c. tárgy SML-részéhez A vizsgázónak 5-10 perces felkészülés után az alább felsorolt témák közül egyet kell ismertetnie 3-5 percben. Bizonyos esetekben konkrét SML-függvényeket is be kell mutatni (pl. a listát megfordító rev, a két listát összefűző @, a fa mélységét meghatározó depth, a fát listává alakító inorder, a listát rendező inssort függvényt), ilyenkor a felkészülés részeként e függvények kódját is meg kell írni. A vizsga anyaga: - minden, ami a honlapról letölthető SML-diákon (dp05s-fp1-től fp11-ig) van; - a "Bevezetés a funkcionális programozásba" c. oktatási segédlet ötödik kiadásának (SML-jegyzet) 1.-13. fejezete; - az SML belső és alapkönyvtári típusai, kivételei, függvényei és konstruktorai közül a következők (ezeket az SML-jegyzet B. függeléke is tartalmazza; a *-gal megjelölteket csak az mosml ismeri): 1. Belső típusok, kivételek, függvények és konstruktorok Az itt felsoroltak nagy részét a General és a Meta struktúra definiálja. 1.1. Belső típusok: bool, char, exn, int, 'a list, 'a option, order, real, string, unit, word, word8. 1.2. Belső kivételek: Bind, Chr, Div, Domain, Fail, Interrupt, Io, Match, Option, Ord, Overflow, Size, Subscript. 1.3. Belső függvények és konstruktorok a kezdeti környezetben: ~, +, -, *, /, ^, ::, @, =, <>, <, <=, >=, >, abs, app, before, ceil, chr, concat, div, explode, false, floor, foldl, foldr, hd, implode, length, *makestring, map, mod, not, null, o, ord, print, real, rev, round, size, str, tl, true, trunc. 1.4. Csak interaktív módban használható belső függvények: *compile, *load, *loadOne, *printVal, *printDepth, *printLength, *quit, use. 2. Bool struktúra: bool, not, toString, fromString. 3. Char struktúra: char, minChar, maxChar, maxOrd,chr, ord, succ, pred, isLower, isUpper, isDigit, isAlpha, isHexDigit, isAlphaNum, isPrint, isSpace, isPunct, isGraph, isAscii, isCntrl, toLower, toUpper, contains, notContains, fromString, toString, <, <=, >, >=, compare. 4. Int struktúra: int, precision, minInt, maxInt, ~, *, div, mod, quot, rem, +, -, <, <=, >, >=, abs, min, max, sign, compare, toString, fromString. 5. List struktúra: 'a list, null, hd, tl, last, nth, take, drop, length, rev, @, concat, revAppend, app, map, mapPartial, find, filter, partition, foldr, foldl, exists, all, tabulate. 6. Listsort struktúra: sort, sorted. 7. Math struktúra: pi, e, sqrt, sin, cos, tan, atan, asin, acos, atan2, exp, pow, ln, log10, sinh, cosh, tanh. 8. Option struktúra: 'a option, Option, getOpt, isSome, valOf, filter, map, app. 9. Real struktúra: real, ~, +, -, *, /, abs, min, max, sign, compare, fromInt, floor, ceil, trunc, round, <, <=, >, >=, ==, !=, ?=, toString, fromString. 10. String struktúra: string, maxSize, size, sub, substring, extract, concat, ^, str, implode, explode, map, translate, tokens, fields, isPrefix, compare, collate, <, <=, >, >=. Az alábbi listában a téma megnevezését követően hivatkozunk az SML-jegyzetnek arra a fejezetére, szakaszára (a.b, a.b.c. vagy a.b.c. alakban), ill. annak az SML-előadásdiának a számára (di vagy di-j alakban, ahol i és j a dia száma), amely a témával foglalkozik. - Érték, függvényérték, névtelen függvény, deklaráció 3.1., d6-9, d16-22, d24 - Egyszerű típusok, típusmegkötés 3.2., d10-13, d63 - Infix operátor, operátor kötése 3.3. - Ennes, rekord 4.1., 4.2., d58, d63 - Polimorfizmus, egyenlőségi típus 4.3., d40 - Mohó és lusta kiértékelés 5.1., d14-15, d25-26 - Lokális érvényű és egyidejű deklaráció: let, local, and 5.2., d33, d137-139 - Szekvenciális kifejezés: pontosbvessző (;), before d63 - Egész kitevőjű hatványozás 6.1., d96-97 - Elágazó rekurzió: Fibonacci-számok, pénzváltás 6.2., d89-95 - Négyzetgyökvonás Newton-módszerrel 6.3., d30-32, d35, d212-216 - Fixpont-módszer d217-d224 - Egyszerű prímteszt, prímteszt valószínűségi módszerrel: prime, fastPrime d206-210 - Függvény és folyamat, lineáris rekurzió és iteráció: factorial, factIter d36-d38 - Listajelölések, konstruktorok, egyszerű műveletek: upto, prod, sum, maxl, explode, implode 7.1., 7.2., 7.3., d42-43, d45-46, d49, d51-53, d100 - Listák vizsgálata, szétszedése: null, hd, tl, length, take, drop 7.4., 7.5., d44-46, d99 - Listák megfordítása és összefűzése: nrev, rev, @, revApp 7.6., d54-56 - Listákból álló lista, párokból álló lista: flat, combine, split 7.7. - Listák és halmazok: isMem, newMem, setOf, powerset 7.8., d161-162, d165-d167 - Listák és halmazok: union, inter, isSubset, isSetEq 7.8., d163-164, - Adatabsztrakció: racionális számok d113-123 - Felsorolásos adattípusok 8.1., 8.2., d60-61, d125-131 - Polimorf adattípusok, megkülönböztetett egyesítés 8.3., d133-135 - Opcionális értékek kezelése (' option), order-típus d142-143, d145 - Logikai operátorok, case-kifejezés 3.2.5.1., 3.2.5.2., 9.1., 8.4., d27-29, d141 - Lambda-jelölés, részlegesen alkalmazható függvények 9.1., 9.2. - Magasabbrendű függvények: secl, secr, o, curry, uncurry 9.3.1., 9.3.2., 9.3.3. - Magasabbrendű függvények: map, filter, takewhile, dropwhile, exists, forall 9.3.4., 9.3.6., d47-48, d50 - Magasabbrendű függvények: foldl, foldr, repeat 9.3.7., 9.3.8., d101-105 - Futamok előállítása d106-111 - Kivételkezelés: exception, raise, handle 10.1., 10.2., 10.3., d147-151 - Visszalépés kezelése: n vezér d153-159 - Bináris fák, egyszerű műveletek bináris fákon: nodes, depth, fulltree 11.1., d186-189, d191-193 - Bináris fából lista: preorder, inorder, postorder 11.2., d194-196 - Listából bináris fa: balPreorder, balInorder, balPostorder 11.3., d197-200 - Elem törlése bináris fából: remove, join 11.4., d201-202 - Művelek bináris keresőfákon: lookup, insert, update 11.5., d203-204 - Listák rendezése: inssort, selsort 12.1, d170-179 - Listák rendezése: quicksort 12.2., d180-182 - Listák rendezése: tmsort 12.3.1., d183-184 - Lusta kifejezés, lusta lista: lazy, headz, tailz, fromz 13.1., 13.2., d226-231 - Egyszerű műveletek lusta listákon: squarez, addz, appendz 13.3., d232-234 - Magasabbrendű függvények lusta listákon: mapz, filterz, iteratez 13.4., d235-d236 - Álvéletlenszámok előállítása lusta listákkal: randomz 13.5.1., d237-238 - Prímszámok előállítása lusta listákkal: sievez 13.5.2., d239-240 - Gyökvonás lusta listákkal (Newton-Raphson módszer): qroot 13.5.3., d241-243 - Keresztszorzatokból álló lusta lista: enumeratez 13.6., d244-248 - Kiírás d63, d66-69 ---------- lista vége ---------