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

Wczytaj i przeanalizuj program custord.pl

Zrealizuje odpowiadającą mu część ćwiczeń ze strony http://www.amzi.com/AdventureInProlog/a3simple.php

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

pl/dydaktyka/krr/lab_termy.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0