View
224
Download
1
Category
Preview:
Citation preview
Prolog
programowanieROZDZIAŁ 1: WPROWADZENIE
ROZDZIAŁ 2: PROLOG Z BLISKA
NA PODSTAWIE: PROLOG. PROGRAMOWANIE- W. F. CLOCKSIN, C. S. MELLISH
AUTOR OPRACOWANIA: BARTŁOMIEJ KAFTAN
26.04.2016
1Prezentacja do pobranie:
www.barkaf.cba.pl/prezentacja.rar
Instalacja Prologu w środowisku Windows
Współcześnie jest dostępnych szereg
implementacji Prologu, w tym
swobodnie dostępne kompilatory
Prologu:
Jan Wielemaker, SWI-
Prolog, http://www.swi-prolog.org
Daniel Diaz, GNU-
Prolog, http://gnu-prolog.inria.fr
2
Instalacja Prologu w środowisku Windows
Pobieramy plik wykonywalny, i
instalujemy środowisko do
programowania w języku Prolog:
3
Po zainstalowaniu mamy skrót w
menu start z pozytywnie
wyglądającą ikonką:
Uruchomienie zainstalowanego
środowiska: Stwórzmy pierwszą bazę danych, która
posłuży nam do wykonanie pierwszych
zapytań:
Tworzymy plik tekstowy z rozszerzeniem *.pl
W jego treści wpiszemy przykładowe dane:
4
Skrypty z rozszerzeniem pl zapisujemy w domyślnymkatalogu dla skryptów, będzie to zapewne folderProlog w katalogu Moje dokumenty.
Pierwszy program w Prologu
Ładujemy bazę danych poleceniem:
[nazwa_pliku bez rozszerzenia pl].
W naszym przypadku [fam].
Pojawi się true w przypadku poprawnego
załadowania bazy danych.
Następnie wywołujemy polecenie:
?- kobieta(X).
X = kasia pierwszy wynik, następny
wywołamy naciskając średnik.
X = eliza kolejny wynik.
Wyniki są zgodne z zadaną bazą
danych.
5
Podstawowe polecenia
Każdą linie kodu kończymy kropką:
cd('C:/Users/bk/Documents/Prolog').
pwd.
write(‚Hello World’).
Zakończenie pracy w powłoce:
halt.
Komentarz w skryptach:
% treść komentarza jednolinijkowego
/* komentarz wielolinijkowy */
6
Podstawowe polecenia Ładowanie bazy do interpretera:
[nazwa_pliku].
[ścieżka/nazwa_pliku.pl']
Domyślne miejsce przechowywania baz danych:
pwd. sprawdzenie domyślnego miejsca na bazę.
cd(ścieżka/do/katalogu'). zadanie nowego miejsca zaciągania bazdanych.
Wyświetlenie zawartości wczytanej bazy danych:
listing. wyświetlenie bazy.
listing(predykat). informacja na temat danego predykatu
apropos(nazwa) informacje na temat predykatów zawierającychzadaną nazwę
7
Podstawowe polecenia Sposoby uzyskania pomocy:
help. wyświetla cały manual
help(predykat) np. help(write). wyświetli informacje na temat danego
predykatu.
Narzędzia do edycji skryptów:
emasc.uruchamia edytor emacs
zwykły notatnik,
okno swi-prolog file/edit
Operatory:
, - operator and
; - operator or
8
Prolog jako język programowania logicznego
Programowanie logiczne:
- programowanie w logice;
- programowanie w języku logiki;
Programowanie logiczne, jest to metoda programowania, będąca odmianą
programowania deklaratywnego.
9
Programowanie deklaratywne - programista opisuje warunki, jakie musi spełniać końcowe
rozwiązanie (co chcemy osiągnąć), a nie szczegółową sekwencję kroków, które do niego
prowadzą (jak to zrobić). Programowanie deklaratywne często traktuje programy jako pewne
hipotezy wyrażone w logice formalnej, a wykonywanie obliczeń jako ich dowodzenie.
Programowanie deklaratywne jest szczególnym przedmiotem zainteresowania naukowców, gdyż
dzięki minimalizacji lub eliminacji skutków ubocznych może znacząco uprościć tworzenie
programów współbieżnych. Paradygmat programowania deklaratywnego obejmuje szeroką
gamę języków programowania i bardziej szczegółowych paradygmatów podrzędnych.
Przykładami programowalnych języków deklaratywnych są języki funkcyjne i logiczne takie, jak
Ocaml, XSLT czy Prolog.
Prolog – początki
Nazwa języka Prolog pochodzi od francuskiego „Programmation en
Logique”, można to przetłumaczyć jako „programowanie w logice”.
Prolog powstał jako język programowania służący do automatycznej
analizy języków naturalnych, jest jednak językiem ogólnego
zastosowania, szczególnie dobrze sprawdzającym się w programach
związanych ze sztuczną inteligencją. Prolog w przeciwieństwie do
większości popularnych języków jest językiem deklaratywnym.
Prolog został stworzony w 1971 roku przez Alaina Colmeraurera i
Phillipe'a Roussela.
10
Zastosowanie języka Prolog
Relacyjne bazy danych,
Logika matematyczna,
Rozwiązywanie problemów abstrakcyjnych,
Przetwarzanie języka naturalnego,
Automatyzacja projektowania,
Symboliczne rozwiązywanie równań,
Analiza struktur biochemicznych,
Różne zagadnienia z dziedziny sztucznej inteligencji.
11
Pisanie programów w Prologu
Programowanie w prologu nie polega na opisywaniu konkretnych
algorytmów, tak jak w tradycyjnych językach programowania. Pisząc
programy w Prologu musimy zająć się formalnymi relacjami i obiektamizwiązanymi z zadaną problematyką, sprawdzając prawdziwość
poszczególnych relacji, dla zadanego problemu.
Programując w Prologu opisujemy znane fakty i relacje dotyczące
problemu. Program powinien potrafić w dużej mierze wywnioskować,
na podstawie istniejących faktów, o nowych faktach.
12
Obiekty i relacje
Przykład 1:
Ala ma kota.
Ala – obiekt, ma – relacja posiadania, kot – obiekt.
Mamy do czynienia z relacją uporządkowaną ponieważ, to Ala ma kota, a nie kot ma Ale.
Można to zapisać następująco: posiada(ala,kot).
Przykład 2:
Piwo jest tanie.
Relacja nie musi określać jawnie wszystkich obiektów. W przykładzie mamy relacje „bycia tanim”, i relacja dotyczy tutaj obiektu piwo.
Można to zapisać następująco: tanie(piwo).
13
Obiekt, ale nie programowanie
obiektowe
Programowanie obiektowe: obiekt jest strukturą danych, która może
dziedziczyć pola i metody. Początek programowania obiektowego to lata
6O-te, jednak popularność to lata 80-90 (języki Smalltalk, C++, Java).
Prolog służy do zupełnie innych celów niż języki obiektowe. Definiując
obiekt w Prologu mamy na uwadze nie strukturę danych, która może
dziedziczyć pola i metody, ale obiekt rozumiemy jako byt, który możemy
opisać termami.
Ujednolicona struktura danych, term – na jej podstawie tworzone są
wszystkie dane, oraz programy w Prologu.
14
Program w Prologu
Program złożony jest ze zbioru klauzul.
Klauzula to fakt opisujący pewną informację.
Klauzula to reguła mówiąca, jak rozwiązanie można powiązać z danymi faktami.
Do zapisu relacji używamy reguł.
Przykład reguły:
Dwoje ludzi to siostry, jeśli oboje tychże ludzi to kobiety, oraz oboje tychże ludzi mają tych samych rodziców.
Reguła pokazuje jak sprawdzić czy dwie osoby są siostrami sprawdzamy czy obie osoby to kobiety, oraz czy obie osoby mają tych samych rodziców.
15
Programowanie
Podstawowe pojęcia:
Fakt,
Zapytanie,
Zmienna,
Połączenie,
Reguła,
Listy,
Rekurencje
16
Programowanie
Programowanie w Prologu składa się z następujących elementów:
Deklarowanie faktów dotyczących obiektów i związków miedzy
nimi.
Definiowanie reguł dotyczących obiektów i związków miedzy nimi.
Zadawania zapytań o obiektach i związkach między nimi.
Prolog to zbiór faktów i reguł, które są używane do udzielenia
odpowiedzi na zapytanie. Podajemy fakty i reguły, aby program
wywnioskował nowe fakty, na podstawie istniejących.
17
Fakty
Przykład:
lubi(adam,ewa).
Zasady:
Nazwy relacji i obiektów piszemy z małych liter.
W nazwach relacji oraz obiektów nie używamy polskich znaków.
Najpierw piszemy relacje, a następnie obiekty rozdzielone przecinkami w nawiasachokrągłych.
Fakt musi się kończyć kropką – nawiązanie do języka naturalnego.
Ważna jest kolejność podawania argumentów, ponieważ to Adam lubi Ewę, co nieoznacza że Ewa lubi Adama, aby to określić musimy podać następny faktlubi(ewa,adam), lub utworzyć odpowiednią regułę.
Jako że nazwy obiektów mogą być wieloznaczne, to programista decyduje jakrozumień daną nazwę.
18
Nazewnictwo
Nazwy obiektów występujące w nawiasach nazywamy
argumentami.
Nazwę relacji znajdującej się przed nawiasem nazywamypredykatem.
Podawane nazwy są zupełnie dowolne, ale dobrą praktyką jest
przypisywanie nazw dających obraz tego, czego dana nazwa
dotyczy.
Predykaty mogą mieć maksymalnie 1024 argumenty.
Zbiór faktów nazywamy bazą danych.
Podobnie zbiór reguł również nazywamy bazą danych.
19
1024 argumenty predykatu 20
Zapytania
Po utworzeniu bazy danych, możemy zająć się pytaniami. Pytania wyglądająpodobnie jak fakty, ale są poprzedzone znakiem zapytania i myślnikiem „?-”.
Przykład zapytania:
?- lubi(adam,ewa).
Powyższe zapytanie zwróci „true” jeżeli w bazie danych istnieje faktlubi(adam,ewa)., oczywiście jeżeli w bazie danych nie ma takiego faktu tozwrócony zostanie „false”.
Jeżeli zapytamy o coś czego nie ma w bazie, w sensie nie ma odpowiedniego predykatu, to otrzymamy informację:
ERROR: toplevel: Undefined procedure: cosCzegoNieMa/0 (DWIM could notcorrect goal)
Oznacza to że nasza baza nie zawiera predykatu „cosCzegoNieMa”, więc naszezapytanie nie może uzyskać sensownej odpowiedzi.
21
Przykład użycia nieistniejącego predykatu22
Zmienne Zmienne używamy po to, aby nie odpytywać ciągle po kolei o wszystkie interesujące
nas kwestie, ale aby zapytać raz, używając właśnie zmiennej, która będzie
przechodzić po poszczególnych obiektach.
Zmienna może być ukonkretniona lub nieukonkretniona.
Zmienna ukonkretniona, odpowiada konkretnemu obiektowi.
Zmienna nieukonkretniona, gdy nie wiemy jakiemu obiektowi może odpowiadać.
Weźmy zapytanie: ?- lubi(X,maria).
Przetłumaczymy to jako: Kto lubi Marię.
Przyjmijmy, że takimi obiektami będą Piotr oraz Paweł.
?- lubi(X,maria).
X=piotr po wciśnięciu średnika otrzymamy
X=pawel po raz kolejny wciskamy średnik i otrzymujemy
no ponieważ nie ma obiektu spełniającego kryteria wyszukiwania.
23
Przykład użycia zmiennej
Interpretacja:
2) Pytamy kogo lubi obiekt jan.
3) Pytamy przez kogo lubiany jest
obiekt jan.
4) Pytamy kto lubi kogo.
24
Uwaga na wielkość liter, bo jan to
obiekt z bazy, a Jan to zmienna,
której przyporządkowane są
wartości.
Koniunkcje , Koniunkcje będą służyć do zadawania bardziej skomplikowanych zapytań.
Przykład: czy Paweł i Piotr lubią się wzajemnie?
W tej sytuacji należało by zadać dwa odrębne pytania:
Czy Paweł lubi Piotra?
Czy Piotr lubi Pawła?
Gdy obydwie odpowiedzi będą twierdzące, wtedy mamy odpowiedź na pytanie
podstawowe, czy Piotr i Paweł lubią się wzajemnie.
Do skrócenia takich zapisów używamy koniunkcji.
Zapiszemy takie zapytanie w sposób następujący:
?- lubi(piotr,pawel) , lubi (pawel,piotr).
W Prologu spójnik łączący dwa zapytania tj. „i” zapisujemy za pomocą przecinka.
Za pomocą przecinka możemy oddzielić dowolną liczbę zapytań.
Całe zapytanie będzie prawdziwe tylko wtedy, gdy wszystkie pod odpowiedzi będą
pozytywne.
25
Przykład zastosowania koniunkcji,
i dowód na to, że nie wystarczy kogoś lubić,
aby też być lubianym
26
Bardziej skomplikowane zapytania
Przykład: chcemy się dowiedzieć, czy jest coś
wspólnego co lubią dwa zadane obiekty.
?- lubi(obiekt1,X), lubi(obiekt2,X).
Jako rezultat tego zapytania otrzymamy X=… (przy
założeniu że oba obiekty lubią coś wspólnego.
Program najpierw sprawdzi czy jest coś, co lubi
obiekt1, a następnie sprawdzi czy to konkretne coś
jest lubiane także przez obiekt2.
Koniunkcje celów sprawdzamy od strony lewej do
prawej.
27
Przykład bardziej skomplikowanego zapytania 28
Przy pierwszym załadowaniu bazy,
w bazie nie znajdował się fakt:
lubi(piotr,maria).
Mechanizm nawracania 29
Czy naprawdę Jan i Maria razem
lubią wino?
30
Reguły Załóżmy, ze chcemy zapisać fakt, że Piotr lubi wszystkich. Można by tego dokonać
wpisując wszystkie fakty po kolej, ale przy zastosowaniu tego sposobu np. do wszystkich
ludzi w Polsce byłoby to dość pracochłonne oraz czasochłonne.
W Prologu reguł używa się do zapisania, że pewien fakt zależy od grupy innych faktów.
Zapiszmy to w języku potocznym:
„Jan kupuje wino, jeśli jest ono tańsze od piwa.”
„Piotr lubi obiekt, jeśli obiekt jest człowiekiem narodowości polskiej”.
Kolejny przykład w języku potocznym:
X jest siostrą Y, jeśli: X jest kobietą oraz X i Y mają tych samych rodziców.
Jest oczywiste, że zmienne X oraz Y w całym zdaniu muszą mieć tę samą wartość, jeśli by tak nie byłomoglibyśmy dojść do bezsensownych zapisów np.: Anna jest siostrą Marii, jeśli Karolina jest kobietą orazMonika i Paulina mają tych samych rodziców.
31
Reguła to ogólne stwierdzenie dotyczące obiektów i ich powiązań. Możemy pozwolić,
aby miała różne wartości w przypadkach użycia, ale w samej regule musi być
interpretowana jednolicie.
RegułyW języku Prolog reguła składa się z głowy i treści, połączonych symbolami dwukropka
oraz myślnika --> głowa :- treść, oczywiście zakończone kropką:
lubi(jan,X) :- lubi(X,wino).
Przetłumaczmy tę regułę: „Jan lubi X, jeśli X lubi wino.”
Głową reguły będzie: lubi(jan,X)
Treścią reguły będzie: lubi(X,wino)
Głowa i treść połączone są za pomocą :-
Reguła kończy się kropką.
Możemy dodać Janowi bardziej sprecyzowane kryteria poszukiwania sympatii poprzez dodanie
kolejnych warunków:
lubi(jan,X) :- lubi(X,wino), lubi(X,piwo), lubi(X,ciastka).
Reguły zapisujemy w pliku z rozszerzenie .pl w bazie danych.
32
Przykład użycia reguły 33
Reguły, przykłady
Weźmy zapis o siostrach, przyjmijmy:
Dwuargumentowy predykat siostra(X,Y) mówiący, że X jest siostrą Y jeżeli:
X jest kobietą,
Matką X jest M, a ojcem X jest O,
Y ma takich samych: matkę i ojca, jak X.
Zapiszmy to w postaci reguły:
siostra(X,Y) :-
kobieta(X),
rodzice(X,M,O),
rodzice(T,M,O).
To samo możemy zapisać w jednym wierszu.
34
Reguły, przykłady
Rozważmy przykład złodzieja: dana osobamoże coś ukraść, jeśli jest złodziejem, i coś lubi
bo np. to coś jest wartościowe. Zapiszmy to w
Prologu:
moze_ukrasc(P,T) :- zlodziej(P), lubi(P,T).
P – potencjalny złodziej.
T – kradziona rzecz.
/*1*/ zlodziej(jan).
/*2*/ lubi(maria, czekolada).
/*3*/ lubi(maria,wino).
/*4*/ lubi(jan,X) :- lubi(X,wino).
/*5*/ moze_ukrasc(X,Y) :- zlodziej(X), lubi(X,Y).
35
Definicja lubi składa się z 3 klauzul:
Dwóch faktów.
Jednej reguły.
Jan kradnie Marie? 36
?- moze_ukrasc(jan,X).
/*1*/ zlodziej(jan).
/*2*/ lubi(maria, czekolada).
/*3*/ lubi(maria,wino).
/*4*/ lubi(jan,X) :- lubi(X,wino).
/*5*/ moze_ukrasc(X,Y) :- zlodziej(X), lubi(X,Y).
Sposób myślenia języka Prolog:
Aby ukraść cokolwiek, Jan musi być przede wszystkim złodziejem – z klauzuli nr 1 wynika że warunek ten jest spełniony,
Jan musi lubić to co ma ukraść, bo po co kraść coś czego się nie lubi.
Klauzula 4: Jan lubi wszystko to, co lubi wino.
Klauzula 3: Maria lubi wino, a więc z klauzuli 4 wiemy, że Jan lubi Marie.
Spełnione są obydwa warunki:
Jan jest złodziejem oraz Jan lubi Marię.
Wynika z tego, że Jan może ukraść Marię.
Jan kradnie Marie. 37
Prolog z bliska
Składnia języka Programy składają się z termów.
Term to stała, zmienna lub struktura.
Term zapisywany jest jako ciąg znaków, możemy używać następujących
znaków:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9
! ’’ # $ % & ’ ( ) = - ^ | \ { } [ ] _ ` @ + : * ; < > . , ? /
Każdy rodzaj termu: stałe, zmienne oraz struktury rządzą się innymi
zasadami ich tworzenia.
38
Stałe – pierwszy rodzaj termów. Stałe nazywają konkretne obiekty i konkretne relacje.
Rodzaje stałych:
atom: np. lubi, maria, ksiazka, moze_ukrasc, `?-` symbol pytań, `:-` symbol reguł.
liczby np. -17, -2e2, 33.33, 444444, 3.33e-20
Atomy dzielimy na:
Składające się z liter i liczb,
Składające się z symboli.
Jeśli atom ujęty zostanie w pojedynczy apostrof może zawierać dowolne znaki, może się
także zaczynać z dużej litery np. `jan_kowalski` , `jan-kowalski’, `Jan_Kowalski`
39
Zmienne – drugi rodzaj termów. Zmienne mają postać atomów, ale zaczynają się wielką literą, albo
podkreśleniem. Zmienna to inaczej zastępstwo dla danych obiektów.
Przykłady nazewnictwa zmiennych:
X,Y,Z
Odpowiedz, Imie, Nazwisko
Bardzo_opisowa_nazwa_zmiennej
_zmienna
Zmienna anonimowa: oznaczana pojedynczym podkreśleniem _
?- lubi(_,piotr).
Zmiennych anonimowych używamy wtedy, gdy nazwa zmiennej nie maznaczenia. Stosuje się je po to, aby nie wymyślać nazw dla zmiennych, które itak nie zostaną nigdzie dalej wykorzystane.
40
Przykład użycia zmiennych 41
Struktury – trzeci rodzaj termów. Struktury nazywamy termami złożonymi.
Struktura to pojedynczy obiekt, składający się z zestawu innych obiektów.
Te „inne obiekty” nazywamy składnikami struktury.
Składniki struktury są pogrupowane w strukturę.
W prologu strukturę zapisujemy podając funktor oraz jego składniki.
posiada(piotr,ksiazka(pan_tadeusz,mickiewicz)).
Wewnątrz faktu posiada mamy strukturę książka, mającą dwa składniki: tytuł i autora.
posiada(piotr,ksiazka(pan_tadeusz,autor(adam,mickiewicz))).
Jak widać elementem struktury, może był kolejna struktura, w tym przypadku struktura autor.
posiada(piotr,ksiazka(X,autor(adam,Y))).
Struktury mogą być wykorzystywane w zapytaniach i zawierać zmienne. Gdy odpowiedź będzietwierdząca zmienna X zostanie skonkretyzowana tytułem książki, a zmienna Y przyjmie wartośćnazwiska autora, przy założeniu że ma on na imię adam.
Składnia struktur i faktów jest taka sama.
Predykat (w faktach i regułach) jest funktorem struktury.
Argumenty (w faktach i regułach) są składnikami struktury
42
Przykład użycia struktury43
Operatory Funktory możemy zapisywać jako operatory, dla zwiększenia czytelnmości
programów.
Łatwiej jest zapisać „2 + 2 * 2” niżli: +(2, *(2,2)), choć obydwa zapisy znaczą zupełnie to samo.
Operatory nie powodują wykonanie obliczeń, dla Prologu 1 + 1 nie oznacza 2, lecz oznacza +(1,1).
O operatorach musimy znać:
Ich położenie.
Priorytet.
Łączność.
44
Operatory +, -, *, / Są to operatory infiksowe (zapisywane są między swoimi argumentami).
Aby używać operatorów, trzeba ustalić reguły dotyczące kolejności wykonywania
operacji – tzw. priorytety.
Operatory w prologu mają klasę priorytetu. Klasa priorytety to odpowiednia liczba
całkowita, im ta liczba mniejsza, tym priorytet większy.
Łączność operatorów:
Łączność lewostronna.
Łączność prawostronna.
Operatory arytmetyczne posiadają łączność lewostronną, dlatego 4/4/2 jest interpretowane
jako (4/4)/2
Aby wymusić obliczenie możemy zastosować zapis: X is wyrażenie do wyliczenia.
?- X is 2+2*2.
45
Równość i unifikacja Predykat równości, infiksowy operator zapisywany jako =
?- X = Y.
Unifikacja to próba uczynniania X i Y równymi. Predykat równości jest wbudowany (jest z
góry zdefiniowany w Prologu).
46
Struktury są sobie równe, gdy mają taki sam funktor, taką samą liczbę
składników, a odpowiadające sobie składniki są sobie równe.
Arytmetyka Predykaty do porównywania liczb: 47
Arytmetyka a obliczenie 48
Operator infiksowy is Jego prawy argument jest termem, który jest zinterpretowany jako
wyrażenie arytmetyczne.
Wynik wyrażenia arytmetycznego po prawej jest dopasowywany do
lewego argumentu.
Wszystkie wartości wyrażenia po prawej muszą być znane.
P/A to zwykła struktura, natomiast jest traktowana jako wyrażenie
arytmetyczne, dlatego że stoi po prawej stronie operatora is.
Wartość wyrażenia zostaje przyporządkowana do zmiennej Y.
49
Prawa strona wyrażenia is Po prawej stronie możemy użyć następujących wyrażeń.
X + Y
X – Y
X * Y
X / Y
X // Y całkowity iloraz X przez Y
X mod Y reszta z dzielenia X przez Y
oraz najróżniejszych ich kombinacji.
50
Podsumowanie Programista w języku Prolog zadaje pytania, na które zgodnie z załączoną
bazą wiedzy uzyskuje odpowiedź.
Zapytanie to koniunkcja celów jakie mają być spełnione.
Zgodność z faktem spełnia zapytanie od razu.
Reguła pozwala zadania spełniać stopniowo, poprzez spełnienie
koniunkcji jej składowych celów.
Gdy nie można spełnić klauzuli uruchamiany jest proces nawracania.
Nawracanie to przeglądanie dotąd zrealizowanego programu i próba
ponownego spełnienia celu przez znalezienie alternatywnego
rozwiązania.
Po udzieleniu odpowiedzi możemy ponownie wymusić proces nawracania
poprzez wciśnięcie średnika.
51
Zadanie 1. Napisz bazę zad1.pl w taki sposób, aby poniższe zapytania zwróciły
następujące wyniki.
52
Zadanie 2. Napisz bazę zad2.pl w taki sposób, aby poniższe zapytania zwróciły następujące
wyniki.
53
Podczas pisania bazy zdecydowany
zakaz używania faktów typu:
lubi(imie,imie).
Można użyć:
lubi(imie,imie).
lubi(imie,imie).
Zadanie 3.Dane jest drzewo obrazujące relacje ojciec – syn:
Zdefiniuj fakty ojciec(a, b) oraz reguły: dziadek (X,Y), syn(X,Y), brat(X,Y) bazujące na
faktach ojciec(X,Y). Fakty i reguły zapisz do pliku zad3.pl
ojciec(X,Y) oznacza X jest ojcem Y.
dziadek(X,Y) oznacza X jest dziadkiem Y.
syn(X,Y) oznacza X jest synem Y.
brat(X,Y) oznacza X jest bratem Y.
54
Zadanie 4. Utwórz plik zad4.pl zawierający regułę oblicz zawierającą 5
argumentów z czego ostatni pomniejszony o połowę powinien być
równy sumie pierwszego i drugiego argumentu, wymnożonej przez
trzeci argument, podzielonej przez czwarty argument.
oblicz(10,2,3,2,9). ma zwrócić true.
oblicz(15,2,3,2,12.75). ma zwrócić true.
oblicz(11,2,3,0,9). ma zwrócić:
ERROR: //2: Arithmetic: evaluation error: `zero_divisor'
oblicz(10,10,10,10,10). ma zwrócić true.
oblicz(17,10,10,10,10). ma zwrócić false.
55
Zadanie 5. Baza => baza5.pl Napisz reguły:
a(X) Wypisz imiona wszystkich kierowców, którzy poruszają się samochodami o mocy
powyżej 180 koni mechanicznych.
b(X) Wypisz imiona wszystkich kierowców, którzy poruszają się samochodami o mocy
powyżej 180 koni mechanicznych, i poniżej 205 koni mechanicznych, o nadwoziu sedan.
c Wypisz imię kierowcy, rozmiar opony, moc, rodzaj nadwozia w następującym
formacie:
Kierowca = …
Kolor = …
Opona = …
Moc = …
Nadwozie = …
Ale nie wypisuj pojazdów w nadwoziu sedan, oraz o mocy od 170 do 210 koni
mechanicznych. Rozmiar opony niech będzie nie większy niż 16 cali.
56
Baza do zadania nr 5 57
kierowca(piotr,samochod(silnik(100,benzyna),nadwozie(hatchback,zielony),ogumienie(14,zimowe))).
kierowca(adam,samochod(silnik(110,diesel),nadwozie(kombi,zielony),ogumienie(16,letnie))).
kierowca(piotr,samochod(silnik(120,benzyna),nadwozie(sedan,zielony),ogumienie(17,letnie))).
kierowca(michal,samochod(silnik(130,diesel),nadwozie(hatchback,zielony),ogumienie(18,zimowe))).
kierowca(karol,samochod(silnik(140,benzyna),nadwozie(kombi,zielony),ogumienie(19,letnie))).
kierowca(karolina,samochod(silnik(150,diesel),nadwozie(sedan,zielony),ogumienie(20,zimowe))).
kierowca(pawel,samochod(silnik(160,benzyna),nadwozie(hatchback,zielony),ogumienie(13,letnie))).
kierowca(teresa,samochod(silnik(170,diesel),nadwozie(sedan,zielony),ogumienie(16,zimowe))).
kierowca(aleksandra,samochod(silnik(180,benzyna),nadwozie(kombi,zielony),ogumienie(18,zimowe))).
kierowca(beata,samochod(silnik(190,diesel),nadwozie(hatchback,zielony),ogumienie(15,letnie))).
kierowca(agnieszka,samochod(silnik(200,benzyna),nadwozie(sedan,zielony),ogumienie(16,letnie))).
kierowca(anna,samochod(silnik(300,diesel),nadwozie(kombi,zielony),ogumienie(17,zimowe))).
kierowca(karina,samochod(silnik(400,diesel),nadwozie(hatchback,zielony),ogumienie(18,letnie))).
kierowca(zbigniew,samochod(silnik(500,benzyna),nadwozie(sedan,zielony),ogumienie(19,zimowe))).
Dziękuj
58
Recommended