You are on page 1of 6

Michał Zawiślak, III rok IB, grupa GL03

Sprawozdanie z ćwiczenia nr 4
Temat: Podstawy programowania w Prologu. Bazy wiedzy i ich modyfikacja.
Operacje wejścia/wyjścia. Programowanie interaktywne. Rozwiązane zagadki
logiczne.

Kod programu 1:
:-dynamic wiek/2.

select(H,[H|T],T).
select(X,[H|T],[H|T1]) :- select(X,T,T1).
suma_elem([],0).
suma_elem([X|Y],S):-suma_elem(Y,S1), is(S,X+S1).

czytaj_plik :-consult('baza_wiedzy.pl').
wyswietl:-listing(wiek).
dodaj(wiek(X,Y)):-assertz(wiek(X,Y)).
usun(Term):-retract((Term)).
srednia_wieku(Wynik):- findall(A,wiek(_,A),Lista),length(Lista,I),
suma_elem(Lista,S),is(Wynik,S/I).
aktualizuj:-tell('baza_wiedzy.pl'),wyswietl,told.

Wynik:

?- czytaj_plik.
true.
?- wyswietl.
:- dynamic wiek/2.
true.
?- dodaj(wiek(piotr,10)).
true.
?- wyswietl.
:- dynamic wiek/2.
wiek(piotr, 10).
true.
?- usun(wiek(piotr,10)).
true.

:.T.listing(imie).select(X. ?. imie(piotr).S):-suma_elem(Y.aktualizuj.dynamic imie/1. Kod programu 2: :-dynamic imie/1.wyswietl.Lista). :. :-dynamic wiek/2.told.X+S1).wiek(_.czytaj_plik. true. suma_elem(Lista.A).T).[H|T1]) :. suma_elem([]. Kod programu 3: kolor(czerwony). true.S).Y)). srednia_wieku(Wynik):. select(X.wyswietl.dynamic wiek/2. is(S.[H|T].S1). kolor(zielony). true.?.dynamic wiek/2. .Y)):-assertz(wiek(X. true. Wynik: ?.T1).dodaj(wiek(piotr. :.pl').assertz(imie(X)). wiek(piotr. dodaj(wiek(X. 10).dynamic imie/1. aktualizuj:-tell('baza_wiedzy.[H|T]. select(H.10)).pl').S/I). czytaj_plik :-consult('baza_wiedzy. ?. suma_elem([X|Y]. true.wyswietl.I).is(Wynik. ?.length(Lista.0). wyswietl:-listing(wiek). usun(Term):-retract(Term).findall(A. :.

Polska = zielony . Czechy = Ukraina. Polska = niebieski .Czechy).Slowacja).kolor(niebieski).Ukraina). .Ukraina. Ukraina = czerwony. Czechy = Ukraina. Ukraina = czerwony. Czechy = Ukraina. Bialorus = czerwony.Bialorus):- obok(Polska. Slowacja = Bialorus. obok(Ukraina. Slowacja = Bialorus. obok(Bialorus. obok(Ukraina. Czechy = Ukraina.Y):-kolor(X). Bialorus = niebieski. Slowacja = Bialorus. Slowacja = Bialorus. obok(Slowacja. Wynik: ?.Slowacja). obok(Ukraina.Czechy. koloruj(Slowacja.Bialorus). obok(Slowacja. Polska = czerwony .Ukraina). Czechy = Ukraina. Ukraina = niebieski. Ukraina = niebieski.kolor(Y). Polska = czerwony . obok(Bialorus.Bialorus).Slowacja). Ukraina = zielony. obok(Polska.Bialorus).Ukraina).Czechy). false.koloruj(Slowacja.Polska. obok(Polska. Ukraina = zielony.Polska).Polska). Bialorus = niebieski.Polska).Czechy. Bialorus = zielony.Polska.Ukraina. obok(Polska. Slowacja = Bialorus. Polska = zielony . Bialorus = zielony. obok(Czechy.X \= Y. obok(X. Bialorus = czerwony. Czechy = Ukraina.Polska). obok(Slowacja. Polska = niebieski . Slowacja = Bialorus. obok(Czechy.

Dom5._._.append(SubL.Ulica)._)]._._._.Dom2._.Ulica).!.Dom4.Ulica)._.Kod programu 4: sublist(SubL.dom(_._. sublist([dom(_.ania._.Ulica).bmw._._._.plywanie).dom(_. member(dom(tomasz. member(dom(_.restauracja. member(dom(wojciech._.dom(_._._._._._.fiat.Ulica).L).Ulica). member(dom(_.Ulica). sublist([dom(mateusz.Ulica).opel._.Ulica)._. renault(Y):- Ulica=[Dom1. pracownik_szpitala(X):- Ulica=[Dom1._.kolarstwo)]._._.Ulica).Ulica)._). member(dom(_._.dom(_._._)]._._).pracownik_politechniki.Ulica)._._)._.L):-append(_._)._.roza.sad._._._._._._._._. member(dom(michal.szary._.zeglarstwo)._. member(dom(_._._)._._.ford.Ulica).zielony._).dom(_.Ulica)._._.Ulica)._._).Dom4.Dom3._._._. member(dom(_._._._).Ulica)._._._._.Ulica)._._. member(dom(tomasz.S. member(dom(_._._._._).ewa._._._.zolty._.granatowy.Dom6].Ulica)._._.alicja._._.mercedes.Ulica).pracownik_ szpitala.pracownik_szpitala._). Hobby) member(dom(andrzej.Kolor._._.Dom2._).ola._).Ulica)._)._. member(dom(andrzej._._.czytanie).Kobieta._._._._.Dom3._. member(dom(mateusz._._._._.Praca._)._._)]._._)._._. %% dom(Mezczyzna._)._._)._. member(dom(dariusz._. member(dom(_._. member(dom(mateusz.pracownik_hotelu._.Ulica)._._.Ulica).fotografia)._)._._)._.wlasciciel_banku.Ulica).bialy.agnieszka.majsterkowicz). member(dom(dariusz._._. member(dom(wojciech._._.fiat._._. sublist([dom(_. member(dom(dariusz.Auto._._._._._. .Dom6]._._._). member(dom(michal._)._. member(dom(X._._._. sublist([dom(_.Ulica).Ulica).granatowy._)._.dom(_. member(dom(andrzej._).czerwony.Ulica)._.dom(michal.Ulica).dom(_._).S)._._)._). member(dom(_.Dom5._.

_._._. member(dom(_. sublist([dom(mateusz. member(dom(_. Używaliśmy komend do otwierania i zamykania plików tell i told._._.renault. asserta. member(dom(_.sad. Ćwiczyliśmy umiejętności pracy na plikach._.dom(_.Ulica).majsterkowicz).granatowy._. retract._.bialy.Ulica)._.Ulica). assertz na koniec).alicja._.roza._.pracownik_hotelu. assertz. W zadaniach do realizacji znalazły .!. member(dom(andrzej._).mercedes._.fiat.pracownik_ szpitala._._.Ulica).Ulica). member(dom(wojciech._. sublist([dom(_.dom(_._._)._._._._._._._).zolty._._.Ulica). member(dom(wojciech._)._._._.plywanie)._.dom(michal. Komendy assert dodają elementy do bazy wiedzy (asserta na początek._)].Ulica)._. member(dom(_.dom(_._._.Ulica)._).opel.granatowy._._._._. member(dom(tomasz._. sublist([dom(_.kolarstwo)]. member(dom(_. ?.dom(_._._. do odczytywania plików see i seen.Ulica)._. X = bialy.zielony.pracownik_szpitala(X)._._).czerwony.Ulica).Ulica).Ulica). na ostatnich laboratoriach zapoznaliśmy się z komendami do modyfikacji bazy wiedzy takich jak: assert._)._._._).czytanie). X = dariusz._._._._. Wynik: ?._).fiat._).Ulica)._. Wnioski Prolog jest jednym z najpopularniejszych języków programowania logicznego._).renault(X).dom(_.szary.zeglarstwo)._._)].fotografia)._.ola. member(dom(_._._._)._._._).restauracja.agnieszka._._._)._. member(dom(_.wlasciciel_banku.Ulica)._. sublist([dom(_._._)._._. member(dom(_.dom(_._.ania._._._. member(dom(dariusz.Ulica)._._. Komenda retract używana jest do usuwania wybranych elementów z bazy wiedzy.Ulica). member(dom(_.dom(_._._.ewa._.bmw._.Ulica).Y._._.Ulica)._._._)._._._)._. Wykonane zadania pozwoliły nam utrwalić nowo poznane komendy oraz wypróbować je w różnych sytuacjach zależnie od treści zadania._)._._._)]._.pracownik_politechniki. member(dom(tomasz.ford._.Ulica).

się również zagadki logiczne do rozwiązania. . Rozwiązanie ich za pomocą programu Prolog jest znacznie prostsze niż szukanie wyniku na kartce.