v2
This commit is contained in:
parent
1c434606fc
commit
56f9efba1d
177
expert.pl
177
expert.pl
@ -10,7 +10,11 @@ pref(P,X) :-
|
|||||||
; Y = cokolwiek).
|
; Y = cokolwiek).
|
||||||
|
|
||||||
pref(P,X) :-
|
pref(P,X) :-
|
||||||
format("~w:\n", [P]),
|
znajdzPCechy(P,XS),
|
||||||
|
format("wybierz ~w\n", [P]),
|
||||||
|
format("do wyboru masz:\n"),
|
||||||
|
forall(member(I,XS), format("- ~w\n",[I])),
|
||||||
|
format("- cokolwiek\n"),
|
||||||
read(Y),
|
read(Y),
|
||||||
nb_setval(P,Y),
|
nb_setval(P,Y),
|
||||||
( Y = X
|
( Y = X
|
||||||
@ -24,7 +28,7 @@ prefb(P,X) :-
|
|||||||
Y=X.
|
Y=X.
|
||||||
|
|
||||||
prefb(P,X) :-
|
prefb(P,X) :-
|
||||||
format("~w?\n",[P]),
|
format("~w? (tak lub nie)\n",[P]),
|
||||||
read(Y),
|
read(Y),
|
||||||
nb_setval(P,Y),
|
nb_setval(P,Y),
|
||||||
Y = X.
|
Y = X.
|
||||||
@ -40,7 +44,12 @@ termin(XS) :-
|
|||||||
!.
|
!.
|
||||||
|
|
||||||
termin(XS) :-
|
termin(XS) :-
|
||||||
format("termin (od-do):\n"),
|
|
||||||
|
format("wybierz termin jaki ci odpowiada\n"),
|
||||||
|
format("przykladowo:\n"),
|
||||||
|
format("3-5 (dowolny miesiac od marca do maja)\n"),
|
||||||
|
format("nie(3-5) (dowolny miesiac nie bedacy miedzy marcem a majem)\n"),
|
||||||
|
|
||||||
read(Y),
|
read(Y),
|
||||||
nb_setval(termin,Y),
|
nb_setval(termin,Y),
|
||||||
member(X,XS),
|
member(X,XS),
|
||||||
@ -50,79 +59,131 @@ termin(XS) :-
|
|||||||
!.
|
!.
|
||||||
|
|
||||||
|
|
||||||
cena(X) :-
|
ilosc(X) :-
|
||||||
nb_current(cena,_),
|
nb_current(ilosc,_),
|
||||||
nb_getval(cena,Y),
|
nb_getval(ilosc,I),
|
||||||
!,
|
!,
|
||||||
X=<Y.
|
X = I.
|
||||||
|
|
||||||
|
ilosc(X) :-
|
||||||
|
format("ilu ludzi chce jechac?\n"),
|
||||||
|
read(I),
|
||||||
|
nb_setval(ilosc,I),
|
||||||
|
X = I.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cena(X) :-
|
cena(X) :-
|
||||||
format("maksymalna cena:\n"),
|
nb_current(maxCena,_),
|
||||||
|
nb_getval(maxCena,Y),
|
||||||
|
!,
|
||||||
|
ilosc(I),
|
||||||
|
|
||||||
|
X*I=<Y.
|
||||||
|
|
||||||
|
cena(X) :-
|
||||||
|
format("maksymalna cena jaka jestes w stanie zaplacic:\n"),
|
||||||
read(Y),
|
read(Y),
|
||||||
nb_setval(cena, Y),
|
nb_setval(maxCena, Y),
|
||||||
X =< Y.
|
ilosc(I),
|
||||||
|
X * I =< Y.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wakacje(zakopane) :-
|
|
||||||
pref(kraj,polska),
|
|
||||||
pref(teren,gory),
|
|
||||||
cena(3000).
|
|
||||||
|
|
||||||
wakacje(hawaje) :-
|
|
||||||
termin([6,7,8]),
|
|
||||||
pref(kraj, usa),
|
|
||||||
pref(teren, morze),
|
|
||||||
cena(8000).
|
|
||||||
|
|
||||||
wakacje(hawaje_poza_sezonem) :-
|
|
||||||
termin([1,2,3,4,5,9,10,11,12]),
|
|
||||||
pref(kraj, usa),
|
|
||||||
pref(teren, morze),
|
|
||||||
cena(5000).
|
|
||||||
|
|
||||||
wakacje(himalaje) :-
|
|
||||||
termin([1,2,3,10,11,12]),
|
|
||||||
cena(5000),
|
|
||||||
pref(teren, gory),
|
|
||||||
prefb(dzieci, nie).
|
|
||||||
|
|
||||||
wakacje(hel) :-
|
|
||||||
termin([5,6,7,8]),
|
|
||||||
pref(teren, morze),
|
|
||||||
pref(kraj, polska),
|
|
||||||
cena(2000).
|
|
||||||
|
|
||||||
wakacje(mazury) :-
|
|
||||||
termin([4,5,6,7]),
|
|
||||||
pref(teren, jezioro),
|
|
||||||
pref(kraj, polska),
|
|
||||||
cena(1500).
|
|
||||||
|
|
||||||
wakacje(bieszczady) :-
|
|
||||||
pref(teren, gory),
|
|
||||||
pref(kraj, polska),
|
|
||||||
cena(2000).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
currentWakacjeAll(X) :-
|
||||||
|
nb_getval(all,X).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
clear :-
|
clear :-
|
||||||
forall(member(A, [kraj,teren, termin, cena, dzieci]), nb_delete(A)).
|
forall(member(A, [kraj,teren, termin, maxCena, dzieci,all,ilosc]), nb_delete(A)).
|
||||||
|
|
||||||
|
|
||||||
|
znajdzWakacje(Y) :-
|
||||||
|
wakacjeAll(All),
|
||||||
|
nb_setval(all,All),
|
||||||
|
znajdzWakacje(X,All),
|
||||||
|
ilosc(_),
|
||||||
|
ansi_format([bold],"Te propozycje odpowiadaja twoim preferencjom\n\n",[]),
|
||||||
|
forall(member(M,X), wyswietlWakacje(M)),
|
||||||
|
|
||||||
|
include(odpowiedniaCena, X,Y),
|
||||||
|
format("\n\n\n"),
|
||||||
|
ansi_format([bold],"O to wszystkie oferty ktore odpowiadaja twoim preferencja i ktore odpowiadaja ci finansowo\n",[]),
|
||||||
|
forall(member(M,Y), wyswietlWakacje(M)),
|
||||||
|
|
||||||
|
clear.
|
||||||
|
|
||||||
|
odpowiedniaCena(w(_,C,_)) :-
|
||||||
|
cena(C).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
znajdzWakacje([],[]).
|
||||||
|
znajdzWakacje([X|XS],[X|_]) :-
|
||||||
|
X = w(_,_,L),
|
||||||
|
forall(member(C,L), call(C)),
|
||||||
|
|
||||||
wakacje2(X) :-
|
znajdzPWakacje(W),
|
||||||
( findall(Y,wakacje(Y),X), clear) ; (clear , fail).
|
delete(W,X,W2),
|
||||||
|
nb_setval(all,W2),
|
||||||
|
znajdzWakacje(XS,W2).
|
||||||
|
|
||||||
|
|
||||||
|
znajdzPCechy(P,Y2) :-
|
||||||
|
znajdzPWakacje(W),
|
||||||
|
findall(X, (member(w(_,_,L),W),member(pref(P,X),L)),Y),
|
||||||
|
sort(Y,Y2).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
znajdzPWakacje(X) :-
|
||||||
|
currentWakacjeAll(All),
|
||||||
|
include(sprawdzPWakacje, All,X).
|
||||||
|
|
||||||
|
sprawdzPWakacje(w(_,_,L)) :-
|
||||||
|
forall(member(X,L), sprawdzPCeche(X)).
|
||||||
|
|
||||||
|
sprawdzPCeche(pref(P,X)) :-
|
||||||
|
(\+ nb_current(P,_)); pref(P,X).
|
||||||
|
|
||||||
|
sprawdzPCeche(prefb(P,X)) :-
|
||||||
|
(\+ nb_current(P,_)) ; prefb(P,X).
|
||||||
|
|
||||||
|
sprawdzPCeche(termin(X)) :-
|
||||||
|
(\+ nb_current(termin,_)) ; termin(X).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
niesprecyzowanyKraj :-
|
||||||
|
pref(kraj, cokolwiek).
|
||||||
|
|
||||||
|
|
||||||
|
wyswietlCeche(pref(P,X)) :-
|
||||||
|
format("~w: ~w\n",[P,X]).
|
||||||
|
wyswietlCeche(prefb(P,X)) :-
|
||||||
|
format("~w: ~w\n",[P,X]).
|
||||||
|
wyswietlCeche(termin(L)) :-
|
||||||
|
format("termin: ~w\n", [L]).
|
||||||
|
wyswietlCeche(_).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
wyswietlWakacje(w(N,C,L)) :-
|
||||||
|
format("~w\n", [N]),
|
||||||
|
ilosc(I),
|
||||||
|
format("cena za osobe: ~w\n", [C]),
|
||||||
|
C2 is I * C,
|
||||||
|
format("dla ~w osob wyniesie to lacznie ~w\n", [I,C2]),
|
||||||
|
forall(member(X,L), wyswietlCeche(X)),
|
||||||
|
format("\n").
|
||||||
|
|
||||||
|
wakacjeAll([ w(zakopane, 1000, [pref(kraj,polska), pref(teren,gory)])
|
||||||
|
, w(hawaje, 3000, [termin([6,7,8]), pref(kraj,usa), pref(teren, morze)])
|
||||||
|
, w(hawaje, 2000, [termin([1,2,3,4,5,9,10,11,12]), pref(kraj,usa), pref(teren,morze)])
|
||||||
|
, w(himalaje, 4000, [niesprecyzowanyKraj, pref(teren, gory), prefb(dzieci, nie)])
|
||||||
|
, w(hel, 1200, [pref(teren, morze), pref(kraj, polska), termin([5,6,7,8])])
|
||||||
|
, w(mazury, 800, [pref(teren, jezioro), pref(kraj, polska), termin([4,5,6,7])])
|
||||||
|
, w(bieszczady, 1200, [pref(teren, gory), pref(kraj, polska)])
|
||||||
|
]).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user