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

Deklaratív programozás

2. Prolog, 1. SML kis házi feladat

2002. március 20.

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

Mindkét programot tömörítve, elektronikus levélben kell beküldeni. Mindkettő beküldéséhez ugyanazt a bash szkriptet kell használni, külön-külön. A szkriptet futtatni a bash dpkhfbe.02s 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

Írjon egy olyan sorosszeg/2 Prolog-eljárást ill. sorosszeg SML-függvényt, amely egész számok listáinak összeglistáját képezi. Az összeglista az a lista, amelynek i. eleme a számlisták i. elemének összege.

A Prolog-eljárás specifikációja

A segédeljárásokat feltétlenül lássa el fejkommenttel! Törekedjék arra, hogy a megoldás hatékony legyen! Vigyázzon arra is, hogy a megoldás ne sikerüljön többszörösen!

% sorosszeg(+Listak, -Osszeg): Osszeg a Listak számlisták összeglistája,
%   amelynek i-edik eleme a számlisták i-edik elemének összege.
%
% :- pred sorosszeg(list(list(integer))::in, list(integer)::out).

Prolog példák

| ?- sorosszeg([], Ossz).
Ossz = [] ? ;
no

| ?- sorosszeg([[]], Ossz).
Ossz = [] ? ;
no

| ?- sorosszeg([[1,2,3]], Ossz).
Ossz = [1,2,3] ? ;
no

| ?- sorosszeg([[11,22,33], [], [2,1]], Ossz).
Ossz = [13,23,33] ? ;
no

| ?- sorosszeg([[1,1], [1,-1]], Ossz).
Ossz = [2,0] ? ;
no

Az SML-függvény specifikációja

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

(* sorosszeg Listak = a Listak számlisták összeglistája, amelynek i-edik eleme a
     számlisták i-edik elemének összege.

   sorosszeg : int list list -> int list
*)

SML példák

- sorosszeg [];
> val it = [] : int list

- sorosszeg [[]];
> val it = [] : int list

- sorosszeg [[1,2,3]];
> val it = [1, 2, 3] : int list

- sorosszeg [[11,22,33], [], [2,1]];
> val it = [13, 23, 33] : int list

- sorosszeg [[1,1], [1,~1]];
> val it = [2, 0] : int list

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

Nem szükséges külön dokumentációt beadnia, de a programját lássa el a működést ismertető kommentekkel.

Ez az második Prolog és az első SML kis házi feladat, ezért khf-pl2.pl ill. khf-ml1.sml néven, külön-külön kell beküldeni a megoldást.

A beadási határidő 2002. április 2. kedd, 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.