Sisteme Expert

Precizari legate de trimiterea temelor

Va rog mult cand trimiteti teme, acestea sa respecte formatul pe care vi l-am zis la laborator.
Pe primul rand numele si grupa, pe al doilea rand data (acestea vi le pune swi-prolog editorul automat). Apoi o scurta descriere a programului (ce face sau cum ati gandit algoritmul, eventuale probleme sau observatii pentru cazuri speciale). Apoi pentru fiecare predicat definit trebuie scris header-ul cu prefixele parametrilor (+, -, ?, :). De asemenea pentru fiecare predicat trebuie o foarte scurta descriere. Predicatul care rezolva exercitiul (predicatul principal) trebuie evidentiat cumva (de exemplu precizati in comentariu ca el se apeleaza pentru a rezolva exercitiul). La sfarsitul fisierului trebuie un comentariu cu mai multe interogari (in principiu, una pe caz general, iar apoi cazurile particulare). Atentie, vin si eu cu propriile mele date de verificare, nu voi folosi doar datele de input precizate de voi deci e posibil sa va trimit tema inapoi chiar si daca pe toate cazurile date de voi functioneaza corect, insa pe un caz dat de mine functioneaza gresit. Pentru copy din prolog, selectati si apoi faceti ctrl+insert.

Exemplu de tema
% Author: Nume Prenume Grupa
% Date: zi/luna/an

%acest program realizeaza interschimbarea a 2 coloane dintr-o "matrice":


%predicate auxiliare care sa ofere exemple de date de intrare
%matrice_exemplu(+Nume_matrice,+Matrice)
matrice_exemplu(m1,
[[1,2,3,4],
[5,6,7,8,9],
[10,11,12,13],
[14,15,16,17]]
).

%cazuri particulare
matrice_exemplu(m2,[]).
matrice_exemplu(m3,[[1]]).


%------predicat solutie-----------
%interschimba_mat(+Matrice,+Pozitie1,+Pozitie2,-MatriceRezultat)
interschimba_mat([],_,_,[]).
interschimba_mat([L|M],P1,P2,[Lrez|Mrez]):-interschimba(L,P1,P2,Lrez), interschimba_mat(M,P1,P2,Mrez).
%---------------------------------


%predicat care realizeaza interschimbarea a 2 elemente de pe pozitii date, intr-o lista folosind un predicat auxiliar
%interschimba(+Lista,+Pozitie1,+Pozitie2,-Lrez)

interschimba(L,P1,P2,Lrez):- (P1>P2)->intersch(L,P2,P1,_,_,Lrez);intersch(L,P1,P2,_,_,Lrez).



%predicatul auxiliar care de fapt realizeaza interschimbarea a 2 elemente de pe pozitii date, intr-o lista
%intersch(+Lista,+Pozitie1,+Pozitie2,-Epoz1, -Epoz2, -Lrez)
%se considera ca Pozitie1 e mai mic decat Pozitie2
intersch([H|L],_,0,Epoz1,H, [Epoz1|L]).
intersch([H|L],0,Poz2,H,Epoz2, [Epoz2|L1]):- Poz2a is Poz2-1, intersch(L,0,Poz2a,H,Epoz2, L1), !.
intersch([H|L],Poz1,Poz2,Epoz1,Epoz2, [H|L1]):- Poz2a is Poz2-1, Poz1a is Poz1-1, intersch(L,Poz1a,Poz2a,Epoz1,Epoz2, L1).






%Exemple de interogari
/*
| ?- matrice_exemplu(m1,M),interschimba_mat(M,0,3,Mrez).
M = [[1,2,3,4],[5,6,7,8,9],[10,11,12,13],[14,15,16,17]],
Mrez = [[4,2,3,1],[8,6,7,5,9],[13,11,12,10],[17,15,16,14]] ?
yes
| ?-
------------------------------------
| ?- matrice_exemplu(m2,M),interschimba_mat(M,0,3,Mrez).
M = [],
Mrez = [] ?
yes
| ?-

-----------------------------------
| ?- matrice_exemplu(m3,M),interschimba_mat(M,0,3,Mrez).
no
| ?-
*/