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

Deklaratív programozás

1. SML kis házi feladat

2001. március 22.

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

A programot tömörítve, elektronikus levélben kell beküldeni. A beküldéshez egy bash szkriptet kell használni. A szkriptet futtatni a

    bash dpkhfbe.01s
paranccsal lehet (feltéve, hogy ezen a néven mentettük el).

Figyelem! Az ural2 szerveren a /usr/local/bin könyvtárban található a bash program.

A szkript elinduláskor elmagyarázza a teendőket (mi legyen az adott könyvtárban, milyen néven stb.). Mielőtt valaki hibára panaszkodna, győződjön meg róla, hogy a hiba az ural2.hszk.bme.hu szerveren is reprodukálható.

A programok készülhetnek MS DOS vagy MS Windows alatt is, de Unix (linux) operációs rendszer alatt is működniük kell.

A feladat

Adott egy lista, amelynek az elemei {szin = string, szam = int} alakú rekordok, ahol a szin mező "piros", "feher" vagy "zold" értéket vehet fel. A szam mező különbözteti meg egymástól azokat a rekordokat, amelyek szin mezője azonos értékű.

A feladat a lista rendezése úgy, hogy az elején legyenek azok a rekordok, amelyek szin mezője "piros", utánuk azok, amelyek szin mezője "feher", végül pedig azok, amelyek szin mezője "zold" értékű. Az egyes színcsoportokon belül az elemek sorrendje ne változzék.

Írjon zaszlo néven olyan SML-függvényt, amely megvalósítja a leírt rendezést.

Felteheti, hogy a tesztadatok hibátlanok, azaz a szin mezőben mindig "piros", "feher" vagy "zold" van, a szam mező értéke pedig mindig egész szám.

A segédfüggvényeket feltétlenül lássa el fejkommenttel! Törekedjék arra, hogy a megoldás hatékony legyen!

(* zaszlo ls = az ls elemeinek fent leírt rendezésével előállított lista
   zaszlo : {szam : int, szin : string} list -> {szam : int, szin : string} list
*)

Példák

- zaszlo [];
> val it = [] : {szam : int, szin : string} list

- zaszlo [{szam=1, szin="feher"}, {szam=2, szin="zold"}, {szam=3, szin="piros"}];
> val it = [{szam = 3, szin = "piros"}, {szam = 1, szin = "feher"},
            {szam = 2, szin = "zold"}] : {szam : int, szin : string} list

- zaszlo [{szam=1, szin="feher"}, {szam=2, szin="piros"}, {szam=3, szin="zold"},
          {szam=4, szin="piros"}];
> val it = [{szam = 2, szin = "piros"}, {szam = 4, szin = "piros"},
            {szam = 1, szin = "feher"}, {szam = 3, szin = "zold"}] :
           {szam : int, szin : string} list

- zaszlo [{szam=1, szin="feher"}, {szam=2, szin="piros"}];
> val it = [{szam = 2, szin = "piros"}, {szam = 1, szin = "feher"}] :
           {szam : int, szin : string} list

Egyéb követelmények és tudnivalók

Ez az első SML kis házi feladat, ezért khf-ml1.sml néven kell beküldeni a megoldást. A beadási határidő 2001. április 2. 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 max. 100 ponton felül).