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. Prolog kis házi feladat

2001. március 9.

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 elindulaskor 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 elemei piros/1, feher/1 vagy zold/1 funktorú struktúrák, tetszőleges sorrendben. A struktúrák argumentuma tetszőleges Prolog kifejezés lehet, de ez a feladat szempontjából érdektelen.

A feladat a lista rendezese úgy, hogy az elején álljanak a piros/1 funktorúak, utánuk feher/1 funktorúak, végül pedig a zold/1 funktorúak. Az egyes csoportokon belül az elemek sorrendje ne változzék.

Írjon egy olyan zaszlo/2 Prolog eljárást, amely megvalósítja a leírt rendezést. Ha a fenti háromtól különböző funktorú elem van a listában, akkor az eljárás hiusúljon meg.

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!


% :- lista == list(szin).
% :- szin ---> piros(any) ; feher(any) ; zold(any).
% zaszlo(Bemenet, Kimenet): a Kimenet lista a Bemenet lista elemeinek
% fent leírt módon rendezett listája
% :- pred zaszlo(lista::in, lista::out).

Példák


| ?- zaszlo([piros(a),kek(b)], Z).
no

| ?- zaszlo([zold(c),piros(d),feher(e)], Z).
Z = [piros(d),feher(e),zold(c)] ? ;
no

| ?- zaszlo([piros(f),zold(g),piros(h),feher(i)], Z).
Z = [piros(f),piros(h),feher(i),zold(g)] ? ;
no

| ?- zaszlo([feher(j),piros(k)], Z).
Z = [piros(k),feher(j)] ? ;
no

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

Ez az első Prolog kis házi feladat, ezért khf-pl1.pl néven kell beküldeni a megoldást. A beadási határidő 2001. március 19., 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).