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

Deklaratív programozás

3. SML kis házi feladat

2005. december 6.

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

A feladat

Tekintsük az alábbi deklarációkat:
exception MinF;
datatype 'a F = A of 'a F list | B of 'a | C
Írjon olyan SML-függvényt minF néven, amely egy 'a F típusú adatstruktúra 'a típusú elemei közül a min függvény szerinti legkisebbet adja eredményül, vagy MinF néven kivételt jelez, ha nincs az 'a F típusú adatstruktúrának 'a típusú eleme. A min függvényt paraméterként adjuk át a minF függvénynek.
(* minF : ('a * 'a -> 'a) -> 'a F -> 'a
   minF min f = az f 'a típusú elemei közül a min szerinti legnagyobb, vagy
                a MinF kivétel, ha f-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

(minF Int.min C handle MinF => 999) = 999;
minF Int.min (B 3) = 3;
(minF Int.min (A[]) handle MinF => 0) = 0;
(minF Int.min (A[A[],C,A[],A[],C]) handle MinF => ~999) = ~999;
minF Real.min (A[B 5.4,A[],C,B ~13.6,B 7.7]) = ~13.6;
minF Int.min (A[B 5,A[B ~5,B 765,B ~875],A[],A[B 7,A[],B 76,C]]) = ~875;
minF (fn (x,y) => chr(Int.min(ord x, ord y))) (A[B#"c",C,A[],B#"k",B#"i"]) = #"c";

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 harmadik SML kis házi feladat, ezért khf-ml3.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. december 16., 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.