A diákon szereplő belső és könyvtári függvények, köztük az egyszerű ki- és beviteli, valamint konverziós függvények ismerete mellett elvárjuk a General, Int, Real, Math, Char, String és List könyvtárbeli típusok, függvények és más értékek használatának ismeretét.
2004-től kezdve nem adunk fel típusegyenleteket, típuslevezetési feladatokat a zéhán. A négy SML feladat pontozása rendszerint 7-7-7-9, az első két feladat általában három-három részfeladatból áll, többnyire 2-2-3 a részpontozásuk.
Az első feladatcsoportban szintaktikailag helyes, de szemantikai szempontból hibás SML-kifejezésekről kell megmondani, hogy miért hibásak.
A második feladatcsoportban helyes SML-kifejezések értékét kell felírni a lehető legegyszerűbb alakban.
A harmadik feladatban néhány más függvényből (pl. lambda-jelöléssel megadott vagy magasabb rendű könyvtári függvényekből) felépülő SML-függvényt kell alkalmazni különféle értékekre, és meg kell adni az alkalmazás eredményét. Kérdés lehet, hogy mutassa be a függvény egyszerűsítési lépéseit mohó (applikatív sorrendű) vagy lusta (normál sorrendű) kiértékelés esetén.
Végül a negyedik feladatban SML-függvényt kell írni valamilyen lista bizonyos tulajdonságú elemeinek az összeadására, összeszorzására, kigyűjtésére stb.
Érdemes megnézni a korábbi feladatsorokat: a típusegyenletek kivételével a másik három fajta hasonló marad. Néhány példa, a zéhában hasonló jellegű, de ezeknél azért nehezebb feladatok várhatók.
1. fajta. Miért hibás (egyetlen hiba van a kifejezésben)?
2. fajta. Mi xs értéke egyszerűsítés után?
3. fajta. Adott az f függvény:
4. fajta. Növekvő futamnak nevezzük egy listában a lehető leghosszabb, azaz semelyik irányban nem kiterjeszthető, monoton növekvő részsorozatokat. Írjon futamSzam néven olyan SML függvényt, amely egy egészlista növekvő futamainak számát adja eredményül. Példa:
1. fajta. Miért hibás (egyetlen hiba van a kifejezésben)?
2. fajta. Mi az xs értéke egyszerűsítés után:
3. fajta. Adott az f függvény:
A chr függvénynek egy szám az argumentuma, az eredménye pedig az a karakter, amelynek az adott szám az ascii-kódja. Pl. chr 120 = #"x". Az f függvény üres listára üres listát ad eredményül. Ha a lista nem üres, akkor az x lista összes elemére kiértékeli a g függvényt (ami itt nem más, mint a chr függvény), majd ezt az így keletkezett listát egy új lista elejére fűzi, és végül a maradék listára is meghívja ugyanezt.
Tehát a mohó kiértékelés miatt először beír mindent, amit lehet:
4. fajta. Növekvő futamnak nevezzük egy listában a lehető leghosszabb, azaz semelyik irányban nem kiterjeszthető, monoton növekvő részsorozatokat. Írjon futamSzam néven olyan SML függvényt, amely egészlista növekvő futamainak számát adja eredményül.
Példa: futamSzam [1,4,7,3,5,11,19,8,6,7,8] = 4
A megoldásom majdnem jó! Egy hiba van vele: a futamSzam [0] meghívásra 2-t ad ki 1 helyett.
Ki tudná kijavítani???