Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:dydaktyka:krr:lab_termy [2017/07/17 10:08]
pl:dydaktyka:krr:lab_termy [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== 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: {{pl:​prolog:​prolog_lab:​car.pl}}
 +
 +Plik pomocniczy: ​ {{pl:​prolog:​prolog_lab:​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:
 +
 +<code prolog>
 +?- X is 2 + 2.
 +?- Y is 2.5 + ( 4 / 2).
 +?- Z is 2 + 0.001.
 +</​code>​
 +
 +Uwaga:
 +
 +<code prolog>
 +?- A is 3.
 +?- B is A + 4.
 +?- A is 3, B is A + 4.
 +</​code>​
 +
 +Operacje arytmetyczne:​
 +
 +<code prolog>
 +?- X is 2 + 2.
 +?- X is 2 * 3.
 +?- X is 4 / 2.
 +?- X is 4 / 3.
 +?- X is 4 // 3.
 +</​code>​
 +Uwaga na //​podstawianie//:​
 +
 +<code prolog>
 +?- X is 2 + 5.
 +?- X = 2 + 5.
 +?- 2 + 5 =:= 1 + 4.
 +?- 2 + 5 =:= 3 + 4.
 +?- 2 + 5 =:= 4 + 4.
 +</​code>​
 +
 +Przećwiczyć użycie operatorów:​
 +
 +<code prolog>
 +?- 2 < 3.
 +?- 2 > 3.
 +?- 3 > 3.
 +?- 3 >= 3.
 +?- 3 =< 3.
 +</​code>​
 +
 +2. Napisz program obliczający wynik [[http://​pl.wikipedia.org/​wiki/​R%C3%B3wnanie_kwadratowe|równania kwadratowego]] ([[wp>​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ć [[http://​www.swi-prolog.org/​pldoc/​man?​section=funcsummary|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ń:
 +
 +<code prolog>
 +?- 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)). ​
 +</​code>​
 +
 +Korzystając z programu o rodzinie z 1. zajęć:
 +<code prolog>
 +?- 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!'​).
 +</​code>​
 +
 +Wpisz poniższy program do pliku geoman.pl
 +<code prolog>
 +vertical(line(point(X,​Y),​point(X,​Z))).
 +horizontal(line(point(X,​Y),​point(Z,​Y))). ​
 +</​code>​
 +Jak pozbyć się ostrzeżeń (bez zmiany jego działania)?​
 +
 +Zadaj poniższe pytania:
 +<code prolog>
 +?-  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)). ​
 +</​code>​
 +
 +===== Przykład: Zamówienia =====
 +
 +Wczytaj i przeanalizuj program {{:​pl:​prolog:​prolog_lab:​custord.pl|}}
 +
 +Zrealizuje odpowiadającą mu część ćwiczeń ze strony [[http://​www.amzi.com/​AdventureInProlog/​a3simple.php]]
 +
 +===== Przykład: System klasyfikujący =====
 +Wczytaj program {{:​pl:​prolog:​prolog_lab:​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 {{:​pl:​prolog:​prolog_lab:​nani.pl|}}
 +
 +Opis gry i sytuacji gracza [[http://​www.amzi.com/​AdventureInProlog/​a2facts.php|znajdziesz tutaj]].
 +
 +Opis struktur danych [[http://​www.amzi.com/​AdventureInProlog/​a9struct.php|jest tu]]
 +
 +Program używa prawie tylko mechanizmów które znasz (pojawiają się listy, ale "​niegroźnie"​).
 +
 +Przeanalizuj przykłady [[http://​www.amzi.com/​AdventureInProlog/​a10unif.php|unifikacji]].
 +
 +===== Materiały =====
 +  * [LPN] [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlch2|Unifikacja]]
 +  * [AIP] [[http://​www.amzi.com/​AdventureInProlog/​a9struct.php|Struktury danych]]
  
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