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.

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

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

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

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

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