Witam
Mam pytanie bo na zaliczenie przedmiotu miałem zrobić system ekspertowy w PROLOGu i napisałem kod tego systemu, który ma za zadanie ułatwić obsługę studentów pracownikom dziekanatu, który jest następujący :
%DEKLAROWANIE:
prawda([choroba,zaplacony_warunek_A]).
wykluczenia([]).
oceny(2,2,2).
jest(X):- prawda(Z), element(X,Z).
true(X):- jest(X), \+blad.
true(X):- rule(X,[]),\+blad.
true(X) :- rule(X,Y), spelnione(Y), \+blad.
true(pozytywne_A):- oceny(A,_,_), A>2.
true(negatywne_A):- oceny(A,_,_), A=2.
true(pozytywne_B):- oceny(_,B,_), B>2.
true(negatywne_B):- oceny(_,B,_), B=2.
true(pozytywne_C):- oceny(_,_,C), C>2.
true(negatywne_C):- oceny(_,_,C), C=2.
true(dobra_srednia_do_stypendium):- oceny(A,B,C), S is (A+B+C)/3, S >= (9/2).
true([H|T]):-
atom_prefix(H,n_), atom_length(H,P1),
P2 is P1-2,sub_atom(H,2,P2,_,X),false(X),true(O).
spelnione([X]):- true(X), \+blad.
spelnione([G|O]):- true(G), spelnione(O), \+blad.
element(X,[X|_]).
element(X,[_|O]):- element(X,O).
false(X) :- \+true(X).
false(X):- jest(Z), wykluczenia(T), element(X,T), element(Z,T), \+jest(X).
%BAZA REGUŁ
rule(zaliczony_semestr,[warunek_B,zaliczone_A,zaliczone_C]).
rule(zaliczony_semestr,[warunek_C,zaliczone_A,zaliczone_B]).
rule(stypendium,[dobra_srednia_do_stypendium]).
rule(wpis_na_nowy_semestr,[zaliczony_semestr]).
rule(zaliczone_A,[pozytywne_A]).
rule(zaliczone_B,[pozytywne_B]).
rule(zaliczone_C,[pozytywne_C]).
rule(zaliczony_semestr,[zaliczone_A,zaliczone_B,zaliczone_C]).
rule(zaliczony_semestr,[warunek_A,zaliczone_B,zaliczone_C]).
rule(zwolnienie_z_oplaty,[choroba]).
rule(zwolnienie_z_oplaty,[osiagniecia_sportowe]).
rule(n_zaliczone_A,[negatywne_A]).
rule(n_zaliczone_B,[negatywne_B]).
rule(n_zaliczone_C,[negatywne_C]).
rule(warunek,[n_zaliczone_A,zaplacony_warunek_A,zaliczone_B,zaliczone_C,brak_warunku_starego_z_A]).
rule(warunek,[n_zaliczone_B,zaplacony_warunek_B,zaliczone_A,zaliczone_C,brak_warunku_starego_z_B]).
rule(warunek,[n_zaliczone_C,zaplacony_warunek_C,zaliczone_B,zaliczone_A,brak_warunku_starego_z_C]).
rule(warunek,[n_zaliczone_A,zwolnienie_z_oplaty,zaliczone_B,zaliczone_C,brak_warunku_starego_z_A]).
rule(warunek,[n_zaliczone_B,zwolnienie_z_oplaty,zaliczone_A,zaliczone_C,brak_warunku_starego_z_B]).
rule(warunek,[n_zaliczone_C,zwolnienie_z_oplaty,zaliczone_B,zaliczone_A,brak_warunku_starego_z_C]).
rule(brak_wpisu,[n_zaliczone_C,n_zaliczone_A,n_zaliczone_B]).
rule(brak_wpisu,[n_zaliczone_A,n_zaliczone_B,zaliczone_C]).
rule(brak_wpisu,[zaliczone_A,n_zaliczone_B,n_zaliczone_C]).
rule(brak_wpisu,[n_zaliczone_A,zaliczone_B,n_zaliczone_C]).
blad:- jest(Z), wykluczenia(T), element(X,T), element(Z,T), jest(X), X \= Z.
Niestety wywołując funkcję jest(X). wywołuje mi tylko to co jest zadeklarowane w prawda nie sprawdza już na podstawie ocen czy zaliczone czy nie :/
Będę wdzięczny za pomoc :)