Lab 2, Cwiczenia prolog

background image

Kurs Inżynierii Wiedzy - Politechnika Krakowska

Na podstawie materiałów dr Michała Berety

1

Ćwiczenia – PROLOG

1. Informacje wstępne.

Do wykonania dwiczeo potrzebny będzie interpreter języka PROLOG. Możesz skorzystad z jednego z
wymienionych w kursie SWI-PROLOG lub PIE.

2. Zadanie 1 – „PROLOGowe HELLO WORLD”

Prologowe Hello World to typowy pierwszy program, który zwyczajowo pisze, każdy kto uczy się
jakiegokolwiek języka programowania. Jest to jednak specyficzne „Hello World”, gdyż nie wyświetli
nam powitania na ekranie, chod jest to możliwe np.:

string :- write('Hello World!').

W PROLOGu skupiamy się na definicjach obiektów i związkach między nimi, a nie na sposobie
wykonania danego zadania. Nacisk zatem jest położony na to CO obliczyd zamiast JAK obliczyd.
Zadaniem programisty jest zapisad logiczną strukturę problemu, sterowanie wykonaniem natomiast
zostawiamy tzw. interpreterowi PROLOGu. Tak więc naszym pierwszym programem będzie… - nie
problem przodków i potomków już zostawmy – zajmijmy się problemem „co kto lubi?”.

Na początek stwórz nowy plik tekstowy i zapisz go pod nazwa „lubi.pl”. Edytuj jego treśd. Zapisz
w nim:

lubi(jarek, jablko).
lubi(jarek, gruszka).
lubi(kasia, piwo).
lubi(kasia, hamburger).

Pamiętaj o kropkach na końcu!


Uruchom interpreter PROLOGu. Załaduj utworzony plik do pamięci poleceniem:

consult(‘sciezka_do_pliku’).

lub

wybierając polecenie consult z menu File.


Po udanej i bezbłędnej konsultacji wpisz następujące zapytania:

?-lubi(jarek, piwo).
?-lubi(kasia, hamburger).


Baza znanych faktów zostaje przeszukana w takiej kolejności w jakiej fakty zostały wprowadzone
i jeśli napotkany zostanie fakt, o który pytamy, odpowiedź będzie pozytywna, a zatem prawdziwośd
faktu zostanie potwierdzona. Jeśli taki fakt nie zostanie znaleziony, PROLOG odpowie „nie”. „Nie”
w PROLOGu nie oznacza, że coś jest nieprawdziwe, a raczej że PROLOG na podstawie znanych mu
faktów (i reguł) nie jest w stanie go potwierdzid.

background image

Kurs Inżynierii Wiedzy - Politechnika Krakowska

Na podstawie materiałów dr Michała Berety

2

3. Zadanie 2 – Stałe i zmienne

W gwoli przypomnienia:

W prologu stałe pisane są z małej litery (np. jarek, książka).

Zmienne pisane są z dużej litery lub zaczynają się od znaku podkreślenia, np. (X, _zmienna,
Zmienna
).

Mając uruchomiony program napisany w Zadaniu 1 wpisz poniższe zapytanie:

?- lubi(kasia, X).

Naciśnięcie ENTER powoduje zakooczenie poszukiwao kolejnych rozwiązao. Naciśniecie „ ; ”
powoduje poszukiwanie alternatywnych rozwiązao. Średnik jest w Prologu oznaczeniem logicznej
operacji OR.

Wpisz kolejne zapytania:

?-lubi(X, jablko).
?-lubi(X,Y).


Do zmiennych przypisywane są kolejne znalezione wartości (uzgadnianie), które pasują do zapytania.
Odbywa się to w procesie zwanym nawracaniem.

4. Zadanie 3 – Reguły

Zapiszmy regułę, że stefan lubi coś, jeśli tylko to cos jest slodkie i zdrowe.

lubi(stefan, X) :- slodkie(X), zdrowe(X).

Reguła składa się z głowy reguły oraz z ciała. Aby spełniona była przesłanka reguły, spełnione muszą
byd wszystkie jej podcele, w tym przypadku oddzielone przecinkiem, co w PROLOGu oznacza logiczne
AND.

Wprowadź do bazy z poprzedniego zadania fakty:

slodkie(jablko).
slodkie(czekolada).
zdrowe(jablko).


i zapytaj co lubi stefan. Jak widad, stefan lubi jablka. Prolog znalazł tą odpowiedź, mimo że w zbiorze
faktów nie było wprost powiedziane, ze stefan lubi jablka. stefan nie lubi natomiast czekolady, gdyż
mimo iż słodka, nie jest zdrowa (przynajmniej nic o jej zdrowotnym wpływie nie jest Prologowi
wiadomo...).

background image

Kurs Inżynierii Wiedzy - Politechnika Krakowska

Na podstawie materiałów dr Michała Berety

3

5. Zadanie 4 – Rodzice i dzieci…

Stwórz nowy plik z następującą zawartością i załaduj go do pamięci.

mezczyzna(adam).
mezczyzna(stefan).
mezczyzna(staszek).
mezczyzna(marek).

kobieta(ala).
kobieta(alina).
kobieta(maria).
kobieta(ania).

rodzice(stefan, staszek, maria).
rodzice(ala, staszek, maria).
rodzice(ania, marek, alina).


Predykat rodzice(X,Y,Z) określa, ze ojcem X jest Y a matką Z.

Zadaj pytanie, kim są rodzice stefana, kogo ojcem jest staszek.

UWAGA. Jeśli chcemy zapytad na przykład tylko o ojca stefana, możemy w miejsce zmiennej
oznaczającej matkę wstawid zmienna anonimową „_”. Symbol ten oznacza, że dana zmienna nas nie
interesuje i może przyjąd jakąkolwiek wartośd.

rodzice(stefan, Ojciec, _).

Stwórz regułę określającą, kiedy X jest siostrą Y.

siostra(X,Y) :- ....

Stwórz regułę mówiącą, że stefan lubi każdego, kto lubi piwo.

lubi(stefan, X) :- ...

6. Zadanie 5 – Arytmetyka

PROLOG umożliwia operacje na liczbach, pamiętad jednak trzeba o różnicach w zapisie:

X = 3*4+2.

a zapisem

X is 3*4+2.

Wypróbuj również zapytanie:

X=3*4+2, display(X).

Wejdź na stronę

http://gollem.science.uva.nl/SWI-Prolog/Manual/arith.html

i sprawdź, jakie

możliwości daje SWI-Prolog jeśli chodzi o działania arytmetyczne.

background image

Kurs Inżynierii Wiedzy - Politechnika Krakowska

Na podstawie materiałów dr Michała Berety

4

7. Zadanie 6 – Proste zadanie matematyczne

Pytanie: Jak obliczyd dwukrotną wartośd podanej liczby, jeśli ta liczba jest większa od 4?

pomnoz_2(X, Wynik) :- X > 4, Wynik is 2*X.

Czy

pomnoz_2(X, Wynik) :- X>4, Wynik = 2*X.

Pytanie: Co zrobid, aby jeśli X jest mniejsze od 4 Wynik miał taką samą wartośd jak

X

?

Przyjrzyj się przykładowi poniżej:

pom(X,W):-X>4, W is X*2.
pom(X,W):-W is X.


Widad, że jeśli nie jest spełniony warunek w pierwszej klauzuli predykatu

pom

, to wykorzystana jest

druga reguła. Prawidłowo zatem PROLOG odpowie na pytanie:

pom(2, Wynik).

Problem jest natomiast gdy zadamy pytanie:

pom(5, Wynik).

Pierwsza odpowiedz jest prawidłowa, jeśli jednak zapytamy o alternatywę (naciśniemy średnik),
dostaniemy drugą odpowiedź, wywnioskowaną z drugiej reguły. Aby uniknąd takich sytuacji często
stosuje się mechanizm odcięcia zapisywany jako wykrzyknik (!).

pom(X,W):-X>4, W is X*2, !.
pom(X,W):-W is X.


Odcięcie powoduje, że po dojściu do danego miejsca, Prolog nie będzie próbował uzgadniad
ponownie celów stających po lewej stronie znaku „!”, w naszym przypadku chodzi o cel główny jakim
jest pytanie pom(5,Wynik). .

Sprawdź działanie poprawionego predykatu pom.

8. Zadanie 7 – KRÓLOWIE

Zbuduj bazę wiedzy, w której zawarta będzie informacjach, w jakich latach rządzili królowie:

np.

krol(jan_I, 1323, 1355).

oznacza, że

jan_I

rządził od 1323 roku do 1355 roku.

Napisz regułę umożliwiającą zadawanie pytao, kto rządził w danym roku.

rzadzil(Krol, Rok) :- ....


Wyszukiwarka

Podobne podstrony:
Lab 2 Cwiczenia prolog listy id Nieznany
lab 1 ćwiczenia
gri2 lab cwiczenia z podstaw pr Nieznany
lab 1, Ćwiczenie 1
I6B1S1 Kozdruń lab 4, Ćwiczenie 4 (WEiP - 2009)
Fizyka lab ĆwiczenieD(1)
pem1 lab cwiczenie 5
ćwiczenei 100, PWR, Fizyka Lab
ĆWICZENIE 1 i 2 ODPOWIEDZI METROLOGIA LAB z MŁODYM Ćwiczenie 2 odpowiedzi na pytania
cwiczenie lab nr 5i6 SPC
LAB 2 Instrukcja wykonania cwiczenia
Wpr do cwiczen lab 5 6
ćwiczenia (2), V rok, Diagnostyka lab, Materiały
Sprawka Lab, Bomba Kalorymetryczna - spr, Ćwiczenie nr:
TiSP - dok, Lab. TiSP - Wykaz ćwiczeń, LABORATORIUM
LAB instrukcje, Ćwiczenie 13, Przebieg _wiczenia:
1-2 lab, Laboratorium 1, Laboratorium 1 - Prolog

więcej podobnych podstron