A vizsgán tudni kell az SML-jegyzet alábbi fejezeteit:
A vizsgán használni kell tudni
Bool
, Char
, Int
,
List
, Listsort
, Math
,
Option
, Real
és String
könyvtárakat
a jegyzet A (ezen belül A.2, A.3, A.5, A.7, A.8, A.9, A.11, A.13, A.15)
függeléke alapján.
Az alábbi típusok jellemzőit, az alábbi függvények (műveletek) pontos működését fejből ismerni kell.
bool, char, int, real, string, unit, 'a option, order, 'a list
abs,
relációk (<, <=, =, <>, >=, >
)
Bool: not, andalso, orelse, if-then-else
Char: chr, ord, isLower, isUpper, isDigit, isAlpha, isAlphaNum, isSpace, toLower,
toUpper, compare
Int: min, max, compare, toString, fromString
List: null, hd, tl, nth, take, drop, length, rev, @, ::, concat, map,
mapPartial, filter, partition, foldr, foldl, exists, all, getItem
Listsort: sort, sorted
Math: sqrt, sin, cos, exp, ln, log10, pi, e
Option: getOpt, isSome, valOf
Real: min, max, real (= fromInt), floor, ceil, round, trunc, compare, toString,
fromString
String: size, sub, extract, concat, ^, str, explode, implode, tokens,
fields, isPrefix, compare
Kérésre, pontlevonás mellett, megadjuk a felsorolt függvények típusát.
A vizsga első részében, min. 60 perces felkészülési idő alatt, néhány kisebb programozási feladatot kell megoldani Prolog-, ill. SML-nyelven, írásban. Példa a feladható programozási feladatokra SML-nyelven:
Írjon szintOssz néven olyan SML-függvényt, amely egy bináris fában tárolt értékek szintenkénti összegéből alkotott listát ad eredményül! A lista első eleme az első szinten lévő gyökérelem értéke, második eleme a második szinten tárolt, legfeljebb két elem összege s.í.t. A fa típusa: datatype itree = L of int | N of itree * int * itree; A függvény specifikációja: szintOssz t = a t-beli elemek szintenkénti összegének listája szintOssz : itree -> int list Példák: szintOssz(L 1999) = [1999] szintOssz(N(N(L 4, 2, L 5), 1, N(N(L 8, 6, L 9), 3, L 7))) = [1, 5, 22, 17]
A második részben (felkészülési idő nélkül, legfeljebb rövid gondolkodás után) kiskérdésekre kell válaszolni (adott programrészlet működését elmagyarázni, típusegyenletet megoldani, Prolog-kifejezés gráfját felrajzolni, egy-egy beépített függvény, ill. eljárás működését ismertetni, egy-egy témakörről kiselőadást tartani stb.).
Az SML-részből második feladatként kétféle azonnal megoldható feladatot adunk. Az első egy Mi a típusa? feladat, a második egy Mi az eredménye? feladat. Példák a feladatokra:
Mi a típusa az alábbi v1, v2, v3, v4, v5 SML-értékeknek? A deklarációk egymástól függetlenek, a Math könyvtár be van töltve. val v1 = fn p => fn (q, r) => p q r; val v2 = app (print o str); fun v3 (x, y) = x y y; val v4 = map (String.fields Char.isPunct); val v5 = foldr op:: [Math.sin];Mi az eredménye?
Magyarázza el az alábbi nevtelen függvény működését! fun nevtelen xs = foldl op:: [] xs; Mi az eredménye a nevtelen(explode "NeveHavan") függvényalkalmazásnak?
A harmadik részben a felkészülési idő alatt megírt programokhoz kell magyarázatot, kiegészítést fűzni, ill. a vizsgáztatónak a programokra vonatkozó kérdéseire válaszolni.
A vizsga első három részben max. 70 pont szerezhető.
Végül a negyedik részben a hallgatónak a zh-ra, ill. az nhf-re vonatkozó kérdésekre kell válaszolnia, ha írt zh-t, ill. adott be nhf-et. Ha a válaszok nem kielégítőek, a zh-ra, ill. az nhf-re kapott pontszámot nem vesszük figyelembe az osztályzatban.