Projekt 3
Przedmiot:
Projektowanie imperatywne, obiektowe i deklaracyjne
Prowadząca:
mgr K. Piotrowska
1. Celem ćwiczenie było napisać system ekspertowy w języku PROLOG do
wykrywania awarii komputera zawierającej między innymi bazę
danych , w której zostały przeanalizowane pewne informacje na temat
awarii komputera.
2. Kod zródłowy, który został napisany w ramach przedstawienia na zajęcia
z projektowania imperatywnego, obiektowego i deklaracyjnego:
3. Poniżej przedstawiłem kod zródłowy wraz z komentarzami np.:
ratuj([czarny_ekran], X).
:- module(main, [ratuj/2]).
:- use_module(baza_wiedzy).
% Główny predykat znajdujący listę awarii dla zadanej listy stanów.
ratuj([], []). % Dla pustej listy stanów mamy pustą listę awarii.
ratuj([S|T], Rozpoznanie) :-
ratuj(T, Wynik), % Szukamy awarii dla ogona listy.
sprawdz(S, R), % Unifikujemy listę R z listą awarii dla stanu S.
myAppend(R, Wynik, Rozpoznanie). % Aączymy powyższe listy i otrzymujemy wynik
bez
% powtarzających się awarii.
% Pośredni predykat pomocniczy. Tworzy listę awarii na powiązanych z
% zadanym stanem. Przeszukuje prologową bazę wiedzy.
% Rozpoznanie jest unifikowane z listą awarii.
sprawdz(Stan, Rozpoznanie) :-
sprawdz(Stan, [], Rozpoznanie). % Wywołuję predykat sprawdz/3.
sprawdz(Stan, R, Acc) :-
awaria(Stan, A), % Sprawdzam, czy istnieje awaria przypisana do stanu Stan.
\+ member(A, R), % 'Znaleziona' awaria nie należy do listy R - awarii znalezionych już
% wcześniej.
sprawdz(Stan, [A|R], Acc), % Dołączam nową awarię do listy poprzednio
% znalezionych awarii.
!. % Ocięcie zapobiega przeszukiwaniu drzewa prologowego
% dla przypadków, gdy awaria należy do listy poprzednio
% znalezionych awarii.
sprawdz(Stan, R, R) :- % Gdy znajdziemy awarię, która już należy do naszej listy awarii
% Unifikujemy akumulator z listą znalezionych awarii.
awaria(Stan, A),
member(A, R).
% Torzę własny predykat append służący do łączenia dwóch list.
% Różnica miedzy tą implementacją, a oryginalną jet taka, że tutaj
% podczas łączenia list elementy pojawiające się w dwóch listach
% są pomijane.
myAppend([], List, List). % Dołączenie listy pustej do jakiejkolwiek listy L
% daje nam listę L.
myAppend([H|T], List, Result) :- % Aączymy niepuste listy.
member(H, List), % Sprawdzam, czy element H należy do listy List.
!, % Odcięcie zaobiega przeszukiwaniu drzewa
% prologowego w przypadku,
% gdy H nie należy do List.
myAppend(T, List, Result).% Wywołuję rekurencyjne predykat na ogonie T.
myAppend([H|T], List, [H|Result]) :- % Aączę listy i dołączam H do wyniku, bo
% H nie występuje w List.
myAppend(T, List, Result). % Rekurencyjnie wywołuję predykat dla ogona T.
Wyszukiwarka
Podobne podstrony:
sprawozdanie projektsprawozdanie z projektuSprawozdanie projekt2Sprawozdanie KON o projekcie ustawy o bronisprawozdanie IUM 15 projekt 4 ByczekSprawozdanie IUM 15 projekt 1 Byczeksprawozdanie IUM 15 projekt 1 ByczekSprawozdanie IUM 15 projekt ByczekProjekt 2 Technika obliczen i sposob przedstawienia wynikow w sprawozdaniuProjekt cz 1 SprawozdanieProjekt 1 Sortowanie SprawozdanieSprawozdanie IUM projekt 3 Byczekwięcej podobnych podstron