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.

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

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

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

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

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