Termy i reprezentacja wiedzy w Prologu
Prosty program diagnostyczny
Program realizuje prosty system diagnostyczny (w praktyce wnioskujący wstecz system ekspertowy).
Jest to kompletny program wyposażony w:
bazę wiedzy o problemie
mechanizm wnioskowania - wyszukiwanie rozwiązań
dynamiczną modyfikację/rozbudowę bazy wiedzy
obsługę plików (i/o)
interfejs (prosty) użytkownika
System: car.pl
Plik pomocniczy: getyesno.pl
Przeanalizuj działanie programu, spróbuj dodać kolejną, własną przyczynę awarii, związane z nią reguły diagnostyczne i wyjaśnienie.
Arytmetyka w Prologu
W Prologu nie można w sposób bezpośredni wykonywać obliczeń arytmetycznych. Służy do tego predykat is.
Ćwiczenie
1. Sprawdzić działanie:
?- X is 2 + 2.
?- Y is 2.5 + ( 4 / 2).
?- Z is 2 + 0.001.
Uwaga:
?- A is 3.
?- B is A + 4.
?- A is 3, B is A + 4.
Operacje arytmetyczne:
?- X is 2 + 2.
?- X is 2 * 3.
?- X is 4 / 2.
?- X is 4 / 3.
?- X is 4 // 3.
Uwaga na podstawianie:
?- X is 2 + 5.
?- X = 2 + 5.
?- 2 + 5 =:= 1 + 4.
?- 2 + 5 =:= 3 + 4.
?- 2 + 5 =:= 4 + 4.
Przećwiczyć użycie operatorów:
?- 2 < 3.
?- 2 > 3.
?- 3 > 3.
?- 3 >= 3.
?- 3 =< 3.
2. Napisz program obliczający wynik równania kwadratowego (Quadratic Equation) ax^2 + bx + c = 0
w dziedzinie liczb rzeczywistych.
Zaimplementuj predykaty:
delta/4
– obliczający deltę, argumenty kolejno: a, b, c, wynik,
kwadrat/4
– obliczający wynik równania kwadratowego, argumenty kolejno: a, b, c, wynik.
Zwróć uwagę na niedeterminizm w predykacie kwadrat/4
, który znajduje zero, jedno, albo dwa rozwiązania; mogą się przydać funkcje arytmetyczne.
Termy
Termy to:
stałe 'ala'
szukane (zmienne logiczne) 'Ala'
struktury (dowolnie) złożone 'mezczyzna(jas)', 'ksiazka(tytul(it), autor(king))'
Prolog dopasowuje termy z użyciem mechanizmu unifikacji.
Wpisz, po kolei na konsoli i przemyśl dokładnie każde z poniższych zapytań:
?- a=a.
?- a=b.
?- a(b)=a(b).
?- a(b)=a(c).
?- a(b)=a(C).
?- a(C)=a(b).
?- a(C)=a(C).
?- C=a.
?- C=C.
?- C=a(c).
?- k(s(g),Y) = k(X,t(k)).
Korzystając z programu o rodzinie z 1. zajęć:
?- rodzic(kasia,robert).
?- rodzic(kasia,X).
?- rodzic(kasia,X),write(X).
?- rodzic(kasia,X),X=robert,write('udalo sie!').
?- X=robert,rodzic(kasia,X),write('udalo sie!').
Wpisz poniższy program do pliku geoman.pl
vertical(line(point(X,Y),point(X,Z))).
horizontal(line(point(X,Y),point(Z,Y))).
Jak pozbyć się ostrzeżeń (bez zmiany jego działania)?
Zadaj poniższe pytania:
?- vertical(line(point(1,1),point(1,3))).
?- vertical(line(point(1,1),point(3,2))).
?- horizontal(line(point(1,1),point(2,Y))).
?- horizontal(line(point(2,3),P)).
Przykład: Zamówienia
Przykład: System klasyfikujący
Wczytaj program birds.pl
Realizuje on regułową klasyfikację ptaków.
Program używa prawie tylko mechanizmów które znasz (pojawiają się listy przy menu, ale „niegroźnie”).
Dodaj reguły pozwalające na identyfikację ptaka którego znasz.
Przykład: Gra przygodowa
Wczytaj program nani.pl
Opis gry i sytuacji gracza znajdziesz tutaj.
Opis struktur danych jest tu
Program używa prawie tylko mechanizmów które znasz (pojawiają się listy, ale „niegroźnie”).
Przeanalizuj przykłady unifikacji.
Materiały