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(_,_,_,_)).