BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak
Nappali tagozat
2004/2005. tanév, tavaszi félév

Deklaratív programozás

4. SML kis házi feladat

2005. április 17.

A kis házi feladat beadása nem kötelező.

A feladat

Tekintsük az alábbi deklarációkat:
exception MaxT;
datatype 'a T = B of 'a T list | L of 'a
Írjon olyan SML-függvényt maxT néven, amely egy 'a T típusú adatstruktúra 'a típusú elemei közül a max függvény szerinti legnagyobbat adja eredményül, vagy MaxT néven kivételt jelez, ha nincs az 'a T típusú adatstruktúrának 'a típusú eleme. A max függvényt paraméterként adjuk át a maxT függvénynek.
(* maxT : ('a * 'a -> 'a) -> 'a T -> 'a
   maxT max t = a t 'a típusú elemei közül a max szerinti legnagyobb, vagy
                a MaxT kivétel, ha t-nek nincs 'a típusú eleme
*)
Segédfüggvényeket definiálhat. A jobbrekurzív függvényekből generált számítási folyamatok kevesebb tárterületet használnak, mint a nemjobbrekurzív függvényekből generáltak, ezért ajánljuk, hogy jobbrekurzív függvényeket írjon, ám ez nem kötelező, a pontozásba nem számít bele.

Példák

maxT Int.max (L 3) = 3;
(maxT Int.max (B[]) handle MaxT => 0) = 0;
(maxT Int.max (B[B[],B[],B[],B[],B[]]) handle MaxT => ~999) = ~999;
maxT Real.max (B[L 5.4,B[],B[],L ~13.6,L 7.7]) = 7.7;
maxT Int.max (B[L 5,B[L ~5,L 765,L ~875],B[],B[L 7,B[],L 76,B[]]]) = 765;
maxT (fn (x,y) => chr(Int.max(ord x, ord y))) (B[L#"c",B[],B[],L#"k",L#"i"]) = #"k";

Tudnivalók a beadásról

A programot az Elektronikus Tanársegéd segítségével a weben keresztül lehet beadni, a HF beadás menüpont alatt. Ez a negyedik SML kis házi feladat, ezért khf-ml4.sml néven kell beküldeni a megoldást. A névben meg kell különböztetni a kis- és nagybetűket. A beadási határidő 2005. április 28., csütörtök 24:00.

A vizsgaosztályzat megállapításakor a határidőre beadott, helyesen megoldott kis házi feladatért plusz 1 pont jár (a 100 pontból).