Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Author: Maciej Żelazo
- % Date: 19.01.2019
- % Na kolokwium beda 3 lub 4 zadania z Prologa. Jedno z reukrencji
- % wykorzystywanej w problemach znajdywania przechodnich zaleznosci
- % miedzy faktami (np. wieksze owoce, rodzina, zaleznosci sluzbowe,
- % dynastie, grafy, rejsy). Kolejne bedzie z operacji na wektorach/macierzach.
- % Nastepne - analiza danych
- % Ewentualnie czwarta grupa - prosta zagadka logiczna
- % Zad1 (analiza danych)
- % Dla podanych faktow:
- hobby(ania,[kino,narty]).
- hobby(jola,[kino,balet,boks]).
- hobby(tomek,[narty,boks,karate,basen]).
- % a) wykonaj zapytanie, ktore wskaze osoby, ktore maja mniej niz 3 hobby
- % ?- hobby(I,Z), length(Z,Dlugosc), Dlugosc < 3.
- % b) wykonaj regule, ktora dla podanej osoby obliczy punkty - za kazde hobby 5 punktow
- liczpunkty(Imie,Punkty) :- hobby(Imie,ListaHobby), length(ListaHobby,Ilosc), Punkty is Ilosc*5.
- % ?- liczpunkty(ania,X).
- % c) wykonaj regule, ktora wskaze osoby majace podane hobby
- ktoTeHobby(Hobby,Imie) :- hobby(Imie, ListaHobby), member(Hobby,ListaHobby).
- % ktoTeHobby(kino, X).
- % d) wykonaj regule, ktora wypisze dla podanej osoby wszystkie jej hobby w osobnych liniach
- piszliste([]).
- piszliste([Imie|ListaHobby]) :- write(Imie), nl, piszliste(ListaHobby).
- jakieHobby(Osoba) :- hobby(Osoba,Lista), piszliste(Lista).
- % ?- jakieHobby(ania).
- % Zad. 2 (operacje na wektorach/macierzach)
- % Zdefiniuj predykat potega, ktory dal podanej listy wejsciowej zwraca
- % liste, ktorej elementy stanowia kwadrat
- % listy wejsciowej. % ?- potega([2,4,5],X). --> X = [4,16,25]
- potega([],[]).
- potega([G1|O1],[G2|O2]) :- potega(O1,O2), G2 is G1^2.
- %?- potega([2,5,6],X).
- % Zad. 3 Podaj ile razy wystepuje na liscie podany element
- % np. ?- ile([2,4,7,2,5,2],2,X). --> X = 3
- ile([],_,0).
- ile([G|O],G,Wynik) :- ile(O,G,Wynik2),Wynik is Wynik2 + 1,!. %glowa jest rowna liczbie ktora szukam wtedy licznik zwiekszam
- ile([_|O],G,Wynik) :- ile(O,G,Wynik).%
- %?- ile([2,5,4,2,5],2,X).
- % Zad. 4 Utworz N-elementowa liste z kwadratami liczb naturalnych
- % z przedzialu <1,N>.
- % ?- kwadraty(3,Wektor). --> Wektor = [1,4,9]
- % ?- kwadraty(5,Wektor). --> Wektor = [1,4,9,16,25]
- kwadraty(0,[]) :- !. %alternatywnie kwadraty(1,[1]) :-!>
- kwadraty(N,Lista) :-
- N1 is N-1,
- X is N*N,
- kwadraty(N1,Y),
- append(Y,[X],Lista).
- % ?- kwadraty(4,Wektor).
- %rozwiazanie II
- kwadratyNew(X,Wektor) :-
- numlist(1,X,Lista),
- potega(Lista,Wektor).
- % kwadratyNew(4,Wektor).
- %Zad. 5
- % Napisz program, ktory porownuje dwa wektory i zwraca trzeci wektor,
- % ktory zawiera mniejsze lub rowne
- % elementy na odpowiednich pozycjach w porownywalnych wektorach
- % ?- mniejsze([1,2,3],[5,2,0],Wynik). --> Wynik = [1,2,0]
- mniejsze([],[],[]).
- mniejsze([G1|O1],[G2|O2],[G3|O3]) :-
- (G2 >= G1, G3 is G1),
- mniejsze(O1,O2,O3).
- mniejsze([G1|O1],[G2|O2],[G3,O3]) :-
- (G2 < G1, G3 is G2),
- mniejsze(O1,O2,O3).
- %Zad. 6
- % tytul wykonawcy czas w sekundach
- piosenka('Signs of Life', [gilmour,ezrin],265).
- piosenka('Learning to Fly', [gilmour,moore, ezrin, carin], 293).
- piosenka('The Dogs of War', [gilmour,moore], 371).
- % a) Stworz regule, ktora pozwoli dla podanego wykonawcy podac
- % tytuly jego utworow ?- tytul(moore,Tytul).
- tytul(Wykonawca,TytulPiosenki) :-
- piosenka(TytulPiosenki,ListaWykonawcow,_),
- member(Wykonawca,ListaWykonawcow).
- % ?- tytul(moore,Tytul).
- % Stworz regule, ktora dla podanego tytulu zwroci
- % czas wykonania podzieloneg przez liczbe wykonawcow
- % ?- czas('Signs of Life',X). --> X = 132.5.
- czas(TytulPiosenki,CzasSr) :-
- piosenka(TytulPiosenki,Lista,Czas),
- length(Lista,Wykonawcy),
- CzasSr is Czas/Wykonawcy.
- %?- czas('Signs of Life',X).
- % c) Napisz regule, ktora dla podanego tytulu wyswietli jego wykonawcow
- % w osobnych liniach, ale w odwrotnej kolejnosci niz sa na liscie
- piszlistep([X|ListaPiosenek]) :- write(X), nl, piszlistep(ListaPiosenek).
- wyswietlwykonawcow(TytulPiosenki) :-
- piosenka(TytulPiosenki,Lista,_),
- reverse(Lista,ListaReversed), %Odwrocona liste trzeba zapisac do nowej zmiennej!
- piszlistep(ListaReversed).
- % ?- wyswietlwykonawcow('Learning to Fly').
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement