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.

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

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

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

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

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