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

Deklaratív programozás

1. Prolog kis házi feladat

2002. október 28.

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.02a
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 egész számok

A feladat a lista rendezése úgy, hogy az elején álljanak a negatív számok, utána a 0 értékű elemek, végül pedig a pozitív számok. Az egyes csoportokon belül az elemek sorrendje ne változzék.

Írjon egy olyan negpoz/2 Prolog eljárást, amely megvalósítja a leírt rendezést. Ha a listában egyéb elemek (nem számok) is találhatók, 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!


% negpoz(+Bemenet, -Kimenet): a Kimenet lista a Bemenet lista elemeinek
%   fent leírt módon rendezett listája
% :- pred negpoz(list(T)::in, list(T)::out).

Példák


| ?- negpoz([],Z).
Z = [] ? ;
no

| ?- negpoz([1,0,-6,b],Z).
no

| ?- negpoz([6,0,-9,3,-8,1,2],Z).
Z = [-9,-8,0,6,3,1,2] ? ;
no

| ?- negpoz([-8,0,1,-8,3,0,1],Z).
Z = [-8,-8,0,0,1,3,1] ? ;
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ő november 3., vasárnap 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).