Przykłady programów. - Uniwersytet Opolski

Transkrypt

Przykłady programów. - Uniwersytet Opolski
DEFINIUJEMY KOLIGACJE RODZINNE
DOMAINS
dzien,miesiac,rok=integer
miasto,ulica,nr_domu=symbol
imie,nazwisko=symbol
zajecie,hobby=symbol
czlrodziny=czlrodziny(imie,nazwisko,data_ur)
data_ur=data_ur(dzien,miesiac,rok)
adres=adres(miasto,ulica,nr_domu)
zawod=zawod(zajecie,hobby)
listasymboli=symbol*
PREDICATES
rozne(symbol,symbol)
/* rozne(osoba1,osoba2)
*/
kobieta(symbol)
mezczyzna(symbol)
ojciec(symbol,symbol)
/* ojciec(ojciec,dziecko)
*/
matka(symbol,symbol)
/* matka(matka,dziecko)
*/
brat(symbol,symbol)
/* brat(brat1,rodzenstwo2)
*/
siostra(symbol,symbol)
/* siostra(siostra1,rodzenstwo2
*/
rodzic(symbol,symbol)
/* rodzic(rodzic,dziecko)
*/
dziadek(symbol,symbol)
/* dziadek(dziadek,wnuk lub wnuczka) */
babcia(symbol,symbol)
/* babcia(babcia,wnuk lub wnuczka) */
wnuk(symbol,symbol)
/* wnuk(wnuk,babcia lub dziadek)
*/
wnuczka(symbol,symbol)
/* wnuczka(wnuczka,babcia lub dziadek)*/
maz(symbol,symbol)
/* maz(maz,zona)
*/
zona(symbol,symbol)
/* zona(zona,maz)
*/
malzenstwo(symbol,symbol)
/* malzenstwo(on,ona)lub odwrotnie */
syn(symbol,symbol)
/* syn(syn,rodzic)
*/
corka(symbol,symbol)
/* corka(corka,rodzic)
*/
rodzenstwo(symbol,symbol)
/* rodzenstwo(osoba,osoba)
*/
szwagrostwo(symbol,symbol)
ciocia(symbol,symbol)
wujek(symbol,symbol)
kuzyn(symbol,symbol)
kuzynka(symbol,symbol)
przodek(symbol,symbol)
jestojcem(symbol)
jestsynem(symbol)
jestmezem(symbol)
jestcorka(symbol)
jestciocia(symbol)
jestwujkiem(symbol)
jestzona(symbol)
jestmatka(symbol)
jestbratem(symbol)
jestsiostra(symbol)
jestkuzynem(symbol)
jestkuzynka(symbol)
ichdzieci(symbol)
drukmalzonka(symbol)
drukkrewnych(symbol)
drukrodz(symbol)
druk(listasymboli)
decyzja(symbol)
/* klauzule pomocnicze do dialogu
*/
Nie_ma_wnukow(symbol)
Nie_zna_dziadkow(symbol)
CLAUSES
kobieta(Imie):-plec("kobieta",Imie).
mezczyzna(Imie):-plec("mezczyzna",Imie).
rozne(X,Y):-not(X=Y).
ojciec(X,Y) :- mezczyzna(X),dziecko(Y,X).
matka(X,Y) :- kobieta(X),dziecko(Y,X).
brat(X,Z):-mezczyzna(X),matka(Y,X),matka(Y,Z),rozne(X,Z).
siostra(X,Z):-kobieta(X),matka(Y,X),matka(Y,Z),rozne(X,Z).
rodzenstwo(X,Y):-brat(X,Y);siostra(X,Y).
rodzic(X,Y):-dziecko(Y,X).
syn(Y,X):-dziecko(Y,X),mezczyzna(Y).
corka(Y,X):-dziecko(Y,X),kobieta(Y).
babcia(X,Y):-matka(X,Z),rodzic(Z,Y).
dziadek(X,Y):-ojciec(X,Z),rodzic(Z,Y).
wnuk(X,Y):-mezczyzna(X),dziecko(X,Z),dziecko(Z,Y).
wnuczka(X,Y):-kobieta(X),dziecko(X,Z),dziecko(Z,Y).
maz(X,Y):-sl(X,Y).
zona(X,Y):-maz(Y,X).
malzenstwo(X,Y):-maz(X,Y);zona(X,Y).
szwagrostwo(X,Y):-rodzenstwo(X,Z),zona(X,Y);
rodzenstwo(X,Z),zona(Y,Z);
rodzenstwo(Y,Z),zona(Z,X);
rodzenstwo(Y,Z),zona(X,Z).
ciocia(X,Y):-kobieta(X), szwagrostwo(X,Z),matka(Z,Y).
wujek(X,Y):-mezczyzna(X),szwagrostwo(X,Z),matka(Z,Y).
kuzyn(X,Y):-mezczyzna(X),matka(Z,Y),ciocia(Z,X),rozne(X,Y);
mezczyzna(X),ojciec(Z,Y),wujek(Z,X),rozne(X,Y).
kuzynka(X,Y):-kobieta(X),matka(Z,Y),ciocia(Z,X),rozne(X,Y);
kobieta(X),ojciec(Z,Y),wujek(Z,X),rozne(X,Y).
przodek(X,Y):-dziecko(Y,X).
przodek(X,Y):-dziecko(Y,Z),przodek(X,Z).
PROJEKTOWANIE KOWERSACJI
PREDICATES
Napis
Odp1
Odp2
GOAL
Napis.
CLAUSES
Napis :- write("Jak sie czujesz?"),nl,
write("Odpowiedz: Czuje sie ..."),nl,
readln(Napis3),
concat("Czuje sie ",Napis2,Napis3),
write("Czy zawsze czujesz sie ",Napis2),nl,
write("Odpowiedz 'tak'lub 'nie'."),nl,
readln(Var),
Var="tak", Odp1;
Var="nie", Odp2.
Odp1 :- write("Ciesze sie!").
Odp2 :- write("Zycze Ci zdrowia!").
SZABLON TESTU
m a k e w i n d o w (Nr_Okna,Atrybut_Okna,Atrybyt_ramki,"Nazwa_Okna",
Nr_wiersza,Nr_kolumny,Wysokosc,Szerokosc)
- predykat tworzy aktywne okno, w ktorym moga byc
wykonywane wszystkie deklarowane po tym predykacie
operacje.
A t r y b u t okna i ramki ustala kolor okna
i ramki wedlug wzoru:
kolor = pisak + 16*tlo + 128*mruganie,
gdzie
pisak = 1, 2, 3, ... , 15,
tlo = 1, 2, 3, ... , 7,
mruganie = 0, 2.
shiftwindow(Nr_Okna) - predykat wywolujacy okno o numerze Nr_Okna.
PREDICATES
Imie(symbol)
Nazwisko(symbol)
a
b
ex(integer)
n(integer, integer)
number(integer,integer)
degree
GOAL
degree.
CLAUSES
Imie(I):- write("Imie:"),readln(I),nl.
Nazwisko(N) :- write("Nazwisko:"),readln(N).
a :- makewindow(1,75,7,"TEX",3,0,15,80),shiftwindow(1),
write("*********************************TEST********************************"),nl,
write("*
Odpowiedz na pytania.
*"),nl,
write("* Wybierz jedna z mozliwosci - a,b,c...- wpisz ja z klawiatury *"),nl,
write("*
i potwierdz naciskajac klawisz ENTER.
*"),nl,
write("*********************************************************************"),
nl,nl.
b :- makewindow(2,75,7,"TEX",3,0,15,80),shiftwindow(2).
ex(1) :- write("1)","......"),nl,
write("a)",".........."),nl,
write("b)",".........."),nl,
write("c)",".........."),nl,
write("Wybralem odpowiedz:"),
readln(Var),nl, Var = "b".
ex(2) :- write("2)","......"),nl,
write("a)",".........."),nl,
write("b)",".........."),nl,
write("c)",".........."),nl,
write("Wybralem odpowiedz:"),
readln(Var),nl, Var = "a".
ex(3) :- write("3)","......"),nl,
write("a)",".........."),nl,
write("b)",".........."),nl,
write("c)",".........."),nl,
write("Wybralem odpowiedz:"),
readln(Var),nl,nl, Var = "a".
n(1,4).
n(2,3).
n(3,5).
number(0,0).
number(N,Punkt) :- N>0, M=N-1, K=4-N, ex(K), n(K,S), number(M,P), Punkt=P+S;
N>0, M=N-1, number(M,P), Punkt=P.
degree:- a,Imie(I),Nazwisko(N),b,
number(3,X), write(I," ",N," ma liczbe punktow rowna:", X).
PRZYKLADOWY PROGRAM DYNAMICZNEJ BAZY DANYCH
/*
Przez baze danych rozumiemy zbior wszystkich faktow
oraz regul wystepujacych w programie. Bardzo wazna
wlasnoscia Prologu jest mozliwosc dokonywania zmian
w bazie danych, tzn. usuwania istniejacych klauzul
lub dolaczania nowych - juz w trakcie dzialania programu. W Turbo Prologu mozliwosc ta jest niestety
ograniczona wylacznie do faktow. Predykaty, do ktorych
te fakty naleza, musza byc zadeklarowane w specjalnej
s e k c j i programu o nazwie D A T A T A B Z A
(poza tym predykaty te wykorzystuje sie identycznie,
jak te, ktore sa deklarowane w sekcji PREDICATES).
Ponizej wymieniono najwazniejsze predykaty standadowe
Turbo Prologu zwiazane z operacjami na dynamicznych
bazach danych:
a s s e r t a (F)
- dolaczenie do bazy danych faktu F,
jako pierwszej klauzuli danej procedury,
- dolaczenie do bazy danych faktu F,
jako ostatniej klauzuli danej procedury.
a s s e r t (F)
- dzialanie identyczne jak assertz(F).
r e t r a c t (F) - usuniecie z bazy danych pierwszego faktu,
ktory zostal uzgodniony z faktem F.
r e t r a t A l l (F) - usuniecie z bazy danych wszystkich faktow,
ktore daja sie uzgodnic z faktem F.
c o n s u l t (N) - wprowadzenie do bazy danych klauzul zapisanych
w pliku tekstowym o nazwie N.
s a v e (N)
- zapisanie zawarto/sci bazy danych w pliku
tekstowym o nazwie N .
a s s e r t z (F)
W programie uzyto dodatkowo nastepujacych predykatow:
! - przerwanie nawrotow w miejscu, gdzie wystepuje znak "!".
e x i t - zakonczenie realizacji programu, o ile nie ma juz nawrotow.
m a k e w i n d o w (Nr_Okna,Atrybut_Okna,Atrybyt_ramki,"Nazwa_Okna",
Nr_wiersza,Nr_kolumny,Wysokosc,Szerokosc)
- predykat tworzy aktywne okno, w ktorym moga byc
wykonywane wszystkie deklarowane po tym predykacie
operacje.
A t r y b u t okna i ramki ustala kolor okna
i ramki wedlug wzoru:
kolor = pisak + 16*tlo + 128*mruganie,
gdzie
pisak = 1, 2, 3, ... , 15,
tlo = 1, 2, 3, ... , 7,
mruganie = 0, 2.
s h i f t (Nr_Okna) - predykat wywolujacy okno o numerze Nr_Okna.
r e a d i n t (N) - wczytanie z klawiatury liczby N typu i n t e g e r.
Podobnie uzywamy predykatu r e a d r e a l (R) do
wczytania z klawiatury liczby R typu r e a l.
Znak "_" wystepujacy w argumentach predykatow (np. osoba(Imie,_))
powoduje realizacje predykatu dla wszystkch wartosci
tego argumentu, dla ktorych predykat jest spelniony.
*/
/*CONSTANTS*/
code=2000
DOMAINS
dzien,miesiac,rok=integer
miasto,ulica,nr_domu=symbol
imie,nazwisko=symbol
zajecie,hobby=symbol
czlrodziny=czlrodziny(imie,nazwisko,data_ur)
data_ur=data_ur(dzien,miesiac,rok)
adres=adres(miasto,ulica,nr_domu)
zawod=zawod(zajecie,hobby)
listasymboli=symbol*
DATABASE
d(symbol,symbol)
dziecko(symbol,symbol)
plec(symbol,symbol)
sl(symbol,symbol)
rod(symbol)
rodzina(symbol,czlrodziny,adres,zawod)
czlrodziny(imie,nazwisko,data_ur)
data_ur(dzien,miesiac,rok)
adres(miasto,ulica,nr_domu)
zawod(symbol,symbol)
PREDICATES
n(integer)
run
get(integer,char)
autor
pustabaza
rozne(symbol,symbol)
/* rozne(osoba1,osoba2)
*/
kobieta(symbol)
mezczyzna(symbol)
ojciec(symbol,symbol)
/* ojciec(ojciec,dziecko)
*/
matka(symbol,symbol)
/* matka(matka,dziecko)
*/
brat(symbol,symbol)
/* brat(brat1,rodzenstwo2)
*/
siostra(symbol,symbol)
/* siostra(siostra1,rodzenstwo2
*/
rodzic(symbol,symbol)
/* rodzic(rodzic,dziecko)
*/
dziadek(symbol,symbol)
/* dziadek(dziadek,wnuk lub wnuczka) */
babcia(symbol,symbol)
/* babcia(babcia,wnuk lub wnuczka) */
wnuk(symbol,symbol)
/* wnuk(wnuk,babcia lub dziadek)
*/
wnuczka(symbol,symbol)
/* wnuczka(wnuczka,babcia lub dziadek)*/
maz(symbol,symbol)
/* maz(maz,zona)
*/
zona(symbol,symbol)
/* zona(zona,maz)
*/
malzenstwo(symbol,symbol)
/* malzenstwo(on,ona)lub odwrotnie */
syn(symbol,symbol)
/* syn(syn,rodzic)
*/
corka(symbol,symbol)
/* corka(corka,rodzic)
*/
rodzenstwo(symbol,symbol)
/* rodzenstwo(osoba,osoba)
*/
szwagrostwo(symbol,symbol)
ciocia(symbol,symbol)
wujek(symbol,symbol)
kuzyn(symbol,symbol)
kuzynka(symbol,symbol)
przodek(symbol,symbol)
Pytanie
opcja(integer)
opcja2(integer,symbol)
jestojcem(symbol)
jestsynem(symbol)
jestmezem(symbol)
jestcorka(symbol)
jestciocia(symbol)
jestwujkiem(symbol)
jestzona(symbol)
jestmatka(symbol)
jestbratem(symbol)
jestsiostra(symbol)
jestkuzynem(symbol)
jestkuzynka(symbol)
pom1(symbol)
pom2(symbol)
ichdzieci(symbol)
drukmalzonka(symbol)
drukkrewnych(symbol)
drukrodz(symbol)
/* klauzula dialogu
*/
/* rodzaj dialogu - dialog(nr)
*/
/* poddialog
*/
/* klauzule pomocnicze do dialogu */
druk(listasymboli)
decyzja(symbol)
Nie_ma_wnukow(symbol)
Nie_zna_dziadkow(symbol)
GOAL
MakeWindow(9,132,13,"Dynamiczna baza danych ",0,0,25,80),
n(10000),cursor(0,0),autor,
MakeWindow(1,12,13," RODZINA FLORCZAKOW ",0,1,25,55),
clearwindow(),Pytanie,
write("Dziekuje"),nl.
CLAUSES
/***************************************************************/
/*
GENERATOR LABIRYNTU
*/
/***************************************************************/
n(0) :- run.
n(N) :- N>0, M=N-1,
random(23,ROW),
random(78,COL),
random(10,SEL),
get(SEL,CHAR),
scr_char(ROW,COL,CHAR),
n(M).
run :/*not(keypressed),*/
random(23,ROW),
random(78,COL),
random(10,SEL),
get(SEL,CHAR),
scr_char(ROW,COL,CHAR).
get(0,'Ĺ'). get(1,'´'). get(2,'Ă'). get(3,'Á'). get(4,'Â').
get(5,'Ú'). get(6,'Ŝ'). get(7,'Ů'). get(8,'Ŕ'). get(9,'Ä').
get(10,'ł').
/******************************************************************/
autor :- makewindow(2,13,13,"AUTOR",7,56,6,23),shiftwindow(2),nl,
write(" UNIWERSYTET OPOLSKI"),nl,
write(" Zak’ad Informatyki"),nl,
write("dr Edward Bryniarski").
/**************************************************************/
kobieta(Imie):-plec("kobieta",Imie).
mezczyzna(Imie):-plec("mezczyzna",Imie).
rozne(X,Y):-not(X=Y).
ojciec(X,Y) :- mezczyzna(X),dziecko(Y,X).
matka(X,Y) :- kobieta(X),dziecko(Y,X).
brat(X,Z):-mezczyzna(X),matka(Y,X),matka(Y,Z),rozne(X,Z).
siostra(X,Z):-kobieta(X),matka(Y,X),matka(Y,Z),rozne(X,Z).
rodzenstwo(X,Y):-brat(X,Y);siostra(X,Y).
rodzic(X,Y):-dziecko(Y,X).
syn(Y,X):-dziecko(Y,X),mezczyzna(Y).
corka(Y,X):-dziecko(Y,X),kobieta(Y).
babcia(X,Y):-matka(X,Z),rodzic(Z,Y).
dziadek(X,Y):-ojciec(X,Z),rodzic(Z,Y).
wnuk(X,Y):-mezczyzna(X),dziecko(X,Z),dziecko(Z,Y).
wnuczka(X,Y):-kobieta(X),dziecko(X,Z),dziecko(Z,Y).
maz(X,Y):-sl(X,Y).
zona(X,Y):-maz(Y,X).
malzenstwo(X,Y):-maz(X,Y);zona(X,Y).
szwagrostwo(X,Y):-rodzenstwo(X,Z),zona(X,Y);
rodzenstwo(X,Z),zona(Y,Z);
rodzenstwo(Y,Z),zona(Z,X);
rodzenstwo(Y,Z),zona(X,Z).
ciocia(X,Y):-kobieta(X), szwagrostwo(X,Z),matka(Z,Y).
wujek(X,Y):-mezczyzna(X),szwagrostwo(X,Z),matka(Z,Y).
kuzyn(X,Y):-mezczyzna(X),matka(Z,Y),ciocia(Z,X),rozne(X,Y);
mezczyzna(X),ojciec(Z,Y),wujek(Z,X),rozne(X,Y).
kuzynka(X,Y):-kobieta(X),matka(Z,Y),ciocia(Z,X),rozne(X,Y);
kobieta(X),ojciec(Z,Y),wujek(Z,X),rozne(X,Y).
przodek(X,Y):-dziecko(Y,X).
przodek(X,Y):-dziecko(Y,Z),przodek(X,Z).
/*--------------------------------------------------------------------------*/
opcja(1):-clearwindow(),write("Podaj imie osoby, o ktora chcesz zapytac"),nl,
readln(Imie),rodzina(_,czlrodziny(Imie,_,_),_,_),Clearwindow(),
write(Imie," jest: "),pom1(Imie),readchar(O),O=O,!,pytanie,!;
ClearWindow(),write("Ta osoba nie jest mi znana"),nl,!,pytanie.
opcja(2):-clearwindow(),
write("Czyje malzenstwo Cie interesuje?-podaj imie osoby"),nl,
readln(Imie),rodzina(_,czlRodziny(Imie,_,_),_,_),ClearWindow(),
write(Imie," jest "),drukmalzonka(Imie),readchar(D),D=D,!,clearwindow(),pytanie,!;
clearwindow(),write("Nie znam tej osoby."),nl,pytanie.
opcja(3):-Clearwindow(),
write("Czyj adres Cie interesuje?-podaj imie."),nl,
readln(Imie),rodzina(_,czlRodziny(Imie,_,_),_,_),clearwindow(),
write(Imie," mieszka "),
rodzina(_,czlrodziny(Imie,_,_),adres(Miasto,Ulica,Numer),_),
write("w ",Miasto," przy ulicy ",Ulica," nr ",Numer),readchar(K),K=K,
clearwindow(),!,pytanie;
!,Clearwindow(),write("Nie znam tej osoby"),nl,pytanie.
opcja(4):-Clearwindow(),
Write("Czyja date urodzenia chcesz znac?-Podaj imie."),nl,
ReadLn(Imie),clearwindow(),rodzina(_,czlrodziny(Imie,_,_),_,_),
rodzina(_,czlrodziny(Imie,_,data_ur(D,M,R)),_,_),
Write(Imie," urodzil sie ",D,".",M,".",R," roku."),readchar(J),J=J,
!,clearwindow(),pytanie,!;
!,Clearwindow(),write("Nie znam tej osoby"),nl,pytanie.
opcja(5):-Clearwindow(),write("Mozesz pytac o:"),nl,fail;
Rod(X),write("-",X),nl,fail;
write("O jaka rodzine chcesz zapytac?"),nl,Readln(R),
Clearwindow(),rodzina(R,_,_,_),drukkrewnych(R),!,clearwindow(),pytanie;
write("Nie znam tej rodziny"),nl,clearwindow(),pytanie.
opcja(6):-ClearWindow(),write("Czyje rodzenstwo chcesz poznac?-Podaj imi‘"),nl,
readln(Imie),drukrodz(Imie),clearwindow(),pytanie.
opcja(7):-ClearWindow(),write("Wszystkie malzenstwa to:"),nl,fail;
mezczyzna(X),sl(X,Y),
write("-",X," i ",Y),readchar(D),D=D,nl,fail;
!,clearwindow(),pytanie.
opcja(8):-ClearWindow(),
write("Czyj zaw˘d ci‘ interesuje?-Podaj imi‘."),nl,
readln(Imie),rodzina(_,czlRodziny(Imie,_,_),_,_),clearwindow(),
write(Imie," to "),
rodzina(_,czlrodziny(Imie,_,_),_,zawod(Zajecie,_)),
write(Zajecie),nl,!,readchar(H),H=H,clearwindow(),
pytanie;
!,Clearwindow(),write("Nie znam tej osoby"),nl,pytanie.
opcja(9):-Clearwindow(),
write("Czyje hobby cie interesuje?-Podaj imie."),nl,
readln(Imie),rodzina(_,czlRodziny(Imie,_,_),_,_),clearwindow(),
d(Imie,DX),write(DX," hobby to "),
rodzina(_,czlrodziny(Imie,_,_),_,zawod(_,Hobby)),
write(Hobby),nl,!,clearwindow(),
pytanie;
!,Clearwindow(),write("Nie znam tej osoby"),nl,clearwindow(),pytanie.
opcja(10) :- pustabaza, opcja(10);
write("Podaj nazw‘ bazy: "),readln(Nazwa),nl,
existfile(Nazwa),
consult(Nazwa);
pytanie;
write("Brak pliku o podanej nazwie"),nl,
write("NACI˜NIJ DOWOLNY KLAWISZ"),readchar(T),T=T.
opcja(11) :- Clearwindow(),
write("Podaj imie : "),readln(Imie),
write("Podaj nazwisko:"),readln(Nazw),
write("Podaj p’eŤ,jedn† z dw˘ch(kobieta\m‘§czyzna:"),readln(Plec),nl,
write("Podaj imie ojca:"),readln(Ojc),
write("Podaj imie matki:"),readln(Mat),
write("Podaj dat‘ urodzenia. "),
write("Podaj rok:"),readint(R),
write("Podaj miesi†c:"),readint(M),
write("Podaj dzie¤:"),readint(D),nl,
write("Podaj nazwisko rodziny:"),readln(Nrodz),nl,
write("Podaj miejsce zamieszkania."),
write("Podaj miejscowožŤ:"),readln(Miej),
write("Podaj ulic‘:"),readln(Ul),
write("Podaj nr domu:"),readln(Nr),nl,
write("Podaj zaw˘d: "),readln(Zawod),
write("Podaj hobby:"),readln(Zaint),nl,
write("Podaj dopelniacz imienia"),readln(Dop),
assert(plec(Imie,Plec)),
assert(d(Imie,Dop)),
assert(dziecko(Imie,Ojc)),
assert(dziecko(Imie,Mat)),
assert(rod(Nrodz)),
assert(rodzina(Nrodz,czlrodziny(Imie,Nazw,data_ur(D,M,R)),
adres(Miej,Ul,Nr),zawod(Zawod,Zaint))).
opcja(12):- clearwindow(),
write("Podaj imie usuwanej osoby: "),nl,readln(Imie),
retract(plec(Imie,Plec)),
retract(dziecko(Imie,Ojc)),
retract(rod(Nrodz)),
retract(d(Imie,_)),
retract(rodzina(_,czlrodziny(Imie,_,_),_,_)),!;
write("Brak takiego elementu").
opcja(13) :- clearwindow(),
write("Podaj nazw‘ bazy: "), readln(Nazwa),
save(Nazwa).
opcja(14).
/*------------------OPCJA-1-----------------------------------------------*/
pom1(Imie):- nl,jestsynem(Imie);jestbratem(Imie);jestojcem(Imie);
jestmezem(Imie);jestwujkiem(Imie);jestkuzynem(Imie);
jestcorka(Imie);jestsiostra(Imie);jestkuzynka(Imie);
jestmatka(Imie);jestzona(Imie);jestciocia(Imie);decyzja(Imie).
Decyzja(Imie):-nl,d(Imie,Ms),Write("Jeszcze jakies pytania o ",Ms,"?(t/n)"),nl,
Readln(Znak),Znak="n",ClearWindow(),!;
pom2(Imie).
pom2(Imie)
:-clearwindow(),d(Imie,D),
Write("Mozesz pytac o:"),nl,
Write("1-Dziadkow ",D,";"),nl,
Write("2-Przodkow ",D,";"),nl,
Write("3-Wnuki ",D,";"),nl,
readInt(S),opcja2(S,Imie),
!,decyzja(Imie).
jestsynem(Imie) :-syn(Imie,X),d(X,DX),write("-synem ",DX),nl,fail.
jestojcem(Imie) :-ojciec(Imie,X),d(X,DX),write("-ojcem ",DX),nl,fail.
jestmezem(Imie) :-maz(Imie,X),d(X,DX),write("-mezem ",DX),nl,fail.
jestbratem(Imie) :-brat(Imie,X),d(X,DX),write("-bratem ",DX),nl,fail.
jestwujkiem(Imie):-wujek(Imie,X),d(X,DX),write("-wujkiem ",DX),nl,fail.
jestkuzynem(Imie):-kuzyn(Imie,X),d(X,DX),write("-kuzynem ",DX),nl,fail.
jestcorka(Imie) :-corka(Imie,X),d(X,DX),write("-cork† ",DX),nl,fail.
jestmatka(Imie) :-matka(Imie,X),d(X,DX),write("-matk† ",DX),nl,fail.
jestzona(Imie) :-zona(Imie,X),d(X,DX),write("-zon† ",DX),nl,fail.
jestsiostra(Imie):-siostra(Imie,X),d(X,DX),write("-siostr† ",DX),nl,fail.
jestciocia(Imie) :-ciocia(Imie,X),d(X,DX),write("-cioci† ",DX),nl,fail.
jestkuzynka(Imie):-kuzynka(Imie,X),d(X,DX),write("-kuzynk† ",DX),nl,fail.
opcja2(1,Imie) :-ClearWindow(),Nie_zna_dziadkow(Imie),
write("Nie znam dziadkow tej osoby."),!;
d(Imie,D),write("Dziadkowie i Babcie ",D," to: "),fail;
wnuk(Imie,X),nl,write("-",X),fail;
wnuczka(Imie,Y),nl,write("-",Y),fail;
!.
opcja2(2,Imie) :-Clearwindow(),not(przodek(_,Imie)),nl,
write("Przodkow nie znam."),!;
d(Imie,D),nl,Write("Przodkowie ",D," to :"),nl,
przodek(X,Imie),write("-",X),nl,fail;!.
opcja2(3,Imie) :-ClearWindow(),nie_ma_wnukow(Imie),nl,
write(Imie," nie ma wnukow."),!;
d(Imie,D),write("Wnuczki i wnuki ",D," to: "),fail;
mezczyzna(Imie),Dziadek(Imie,X),nl,Write("-",X),fail;
kobieta(Imie),Babcia(Imie,Y),nl,Write("-",Y),fail;
!.
Nie_ma_wnukow(Imie):-not(dziadek(Imie,_)),not(Babcia(Imie,_)).
Nie_zna_dziadkow(Imie):-not(wnuk(Imie,_)),not(wnuczka(Imie,_)).
/*-----------OPCJA-2-----------------------------------------------------*/
drukmalzonka(Imie):-mezczyzna(Imie),maz(Imie,X),d(X,DX),write(" mezem ",DX),nl,
sl(Imie,X),ichdzieci(Imie);
kobieta(Imie),zona(Imie,X),d(X,DX),write(" zona ",DX),nl,
sl(X,Imie),!,ichdzieci(Imie);
mezczyzna(Imie),not (maz(Imie,_)),write(" niezonaty."),nl;
kobieta(Imie),not (zona(Imie,_)),write(" niezamezna "),nl;
!.
ichdzieci(Imie):-not(rodzic(Imie,_)),write("Nie mieli dzieci."),nl,!;
write("Ich dzieci to: "),nl,
FindAll(X,rodzic(Imie,X),ListaDzieci),
druk(ListaDzieci).
druk([]).
druk([X|Lista]):-write("-",X),nl,druk(Lista).
/*------------------OPCJA-6-----------------------------------------------*/
drukkrewnych(R):-write("Czlonkowie rodziny ",R," to "),nl,fail;
rodzina(R,czlrodziny(X,Y,_),_,_),write("-",X," ",Y,", "),
readchar(B),B=B,nl,fail;nl,!.
/*------------------OPCJA-7-----------------------------------------------*/
drukrodz(Imie):-ClearWindow(),d(Imie,D),not(rodzenstwo(Imie,_)),
write("Nie znam rodzenstwa ",D),nl,!;
d(Imie,D),Write("Rodzenstwo ",D," to: "),fail;
rodzenstwo(Imie,X),nl,write("-",X),readchar(G),G=G,fail;
not(d(Imie,_)),write("Nie znam tej osoby"),fail;nl,!.
/*------------------PYTANIE------------------------------------------------*/
Pytanie:-write("Wybierz numer pytania, ktore cie interesuje."),nl,
write(" 1-pytanie o najblizsza rodzine osoby"),nl,
write(" 2-pytanie o dane malzenstwo"),nl,
write(" 3-pytanie o adres danej osoby"),nl,
write(" 4-pytanie o date urodzenia danej osoby"),nl,
write(" 5-pytanie o czlonkow rodziny"),nl,
write(" 6-pytanie o rodzenstwo danej osoby"),nl,
write(" 7-pytanie o wszystkie malzenstwa"),nl,
write(" 8-pytanie o zaw˘d danej osoby"),nl,
write(" 9-pytanie o zainteresowania osoby"),nl,
write(" 10-wczytanie bazy"),nl,
write(" 11-dopisanie nowej osoby"),nl,
write(" 12-usuniecie danej osoby"),nl,
write(" 13-zapisanie nowej bazy"),nl,
write(" 14-wyjscie"),nl,
readInt(N),nl,
opcja(N).
pustabaza :- retract(d(_,_)),retract(plec(_,_)),retract(rod(_)),
retract(dziecko(_,_)),retract(sl(_,_)),
retract(rodzina(_,_,_,_)).

Podobne dokumenty