Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:prolog:prolog_lab:prolog_lab_2 [2008/02/20 14:37]
gjn komentarze
— (aktualna)
Linia 1: Linia 1:
-====== 2 LAB: Pisanie programów w Prologu ====== 
  
- 
-===== WPROWADZENIE ===== 
- 
- 
- 
-==== Temat: Wypisywanie odpowiedzi ==== 
- 
-Predykat write/1 wypisuje term na wyjście; nl/0 przechodzi do nowej linii. 
- 
-==== Temat: Wymuszanie nawrotów ==== 
- 
- 
-Predykat fail/0 pozwala na wymuszanie nawrotów w procesie poszukiwania rozwiązania,​ co pozwala w szczególności na znalezienie wszystkich rozwiązań problemu. 
- 
-Przypomnienie:​ Prolog używa strategii przeszukiwania wgłąb drzewa rozwiązań problemu i zatrzymuje sie po napotkaniu 1. poprawnego rozwiązania. 
- 
-==== Temat: Programy interaktywne ==== 
- 
- 
-Predykat read/1 pozwala na pobieranie danych od użytkownika. 
- 
-==== Temat: Modyfikacje bazy wiedzy ==== 
- 
- 
-Predykaty assert/a/z /1, retract/a/z /1 pozwalają na dodawanie, usuwanie faktów do/z bazy wiedzy, na/do jej początku/​końca. 
- 
-Predykat abolish/1 pozwala usunąć predykat z bazy wiedzy. 
- 
-Predykat retractall/​1 pozwala usunąć klauzule danego predykatu z bazy wiedzy. 
- 
-Predykaty see/n, tell/told pozwalają na odczyt, zapis bazy wiedzy z/do pliku. 
- 
-==== Temat: Śledzenie pracy programu ==== 
- 
- 
-Interpretery Prologu pozwalają na śledzenie pracy programu. W tym celu należy włączyć śledzenie analizowania konkretnego predykatu przez spy/1, a następnie włączyć tryb śledzenia pracy prograu przez trace/0. 
- 
-Debugger wyłącza się przez nodebug/0. 
- 
-==== Temat: Obliczenia arytmetyczne i operatory porównania ==== 
- 
- 
-W Prologu nie można w sposób //​bezpośredni//​ wykonywać obliczeń arytmetycznych. Służy do tego predykat is. 
- 
-==== Temat: Prosty system ekspertowy ==== 
- 
- 
-W Prologu niezwykle prosto tworzy się systemy ekspertowe. 
- 
-Przykład takiego systemu znajduje sie w pliku {{car.pl}} 
- 
-Dodatkowo korzysta on z pliku {{getyesno.pl}} 
- 
-Jest to system bazujący na wbudowanym w Prolog mechanizmie wnioskowania,​ tj. wnioskowaniu wstecz, czyli abdukcji. 
- 
-===== ĆWICZENIA ===== 
- 
- 
-==== 2.1 Ćwiczenie: Wyświetlanie wyników pracy programu ==== 
- 
- 
-Przetestować działanie: 
- 
-  write('​Ala ma '​),​write('​kota'​),​nl,​write('​w ciapki!'​). 
- 
- 
-==== 2.2 Ćwiczenie: Użycie fail ==== 
- 
- 
-Pobrać i wczytać program {{fam2.pl}} 
- 
-Wyświetlić go przez listing. 
- 
-Sprawdzić działanie: 
- 
-  ?- kobieta(K),​write(K),​write('​ to kobieta.'​),​nl. 
- 
-Jak wymusić odnajdywanie kolejnych kobiet. 
- 
-Sprawdzić działanie: 
- 
-  ?- kobieta(K),​write(K),​write('​ to kobieta.'​),​nl,​fail. 
- 
-Sprawdzić działanie: 
- 
-  ?- kobieta(K),​fail. 
- 
-Dlaczego nic się nie pojawia? 
- 
-Pobrać i wczytać program {{capitals.pl}} 
- 
-Sprawdzić działanie: 
- 
-  ?- capital_of(A,​B),​ write(B), write('​ to stolica '), write(A), nl. 
-  ?- capital_of(A,​B),​ write(B), write('​ to stolica '), write(A), nl, fail. 
- 
-==== 2.3 Ćwiczenie: Praca interaktywna ==== 
- 
- 
-Proszę oglądnąć zastosowanie read/1 na przykładzie programu {{interac.pl}} 
- 
-Po załadowaniu proszę wpisać: 
- 
-  ?- go. 
- 
-==== 2.4 Ćwiczenie: Dynamiczna modyfikacja bazy wiedzy ==== 
- 
- 
-Proszę napisać: 
- 
-  ?- assert(kobieta(kopernik)). 
- 
-jak zmieniła sie wiedza na temat kobiet? 
- 
-  ?- listing(kobieta). 
- 
-Proszę sprawdzić: 
- 
-  kobieta(K),​write(K),​write('​ to kobieta.'​),​nl,​fail. 
- 
-Proszę oglądnąć zastosowanie asser/​retract na przykładzie programu {{learner.pl}} 
- 
-Początkowa baza wiedzy jest w pliku {{learner_kb.pl}} 
- 
-Należy uruchomić program przez start. 
- 
-Jakie 3 przypadki odpowiedzi są brane pod uwagę? Co dzieje się przy wyjściu z programu i jak to wpływa na jego kolejne uruchamianie?​ 
- 
-Uwaga: operator \+ oznacza negację. 
- 
-Uwaga: w programie konstrukcja:​ 
- 
-  :- cos. 
- 
-pozwala na podanie celu, np.: 
- 
-  :- dynamic(capital_of/​2). 
-  :- go. 
-  :- start. 
- 
-Prolog przystąpi do zrealizowania celu po załadowaniu kodu. 
- 
-Predykat dynamic/2 jest potrzebny w niektórych implementacjach Prologu (np. SWI) do umożliwienia wykonywania dynamicznych modyfikacji,​ t.j. assert i retract. 
- 
-==== 2.5 Ćwiczenie: Śledzenie pracy programu ==== 
- 
- 
-Sprawdzić działanie: 
- 
-<code prolog> 
-?- [capitals]. 
-?- spy(capital_of). 
-[debug] ​ ?- trace. 
-[trace] ​ ?- capital_of(A,​B),​ write(B), write('​ to stolica '), write(A), nl. 
-[trace] ​ ?- capital_of(A,​B),​ write(B), write('​ to stolica '), write(A), nl, fail. 
-</​code>​ 
- 
-W SWI Prologu można też skorzystać z dodatkowego pakietu XPCE, w którym jest też wizualny debugger. 
- 
-Należy wyjść z bieżacej sesji SWI. Uruchomić interpreter przez polecenie xpce. Następnie wykonać: 
- 
-<code prolog> 
-?- [capitals]. 
-?- spy(capital_of). 
-[debug] ​ ?- guitracer. 
-[debug] ​ ?- trace. 
-[trace] ​ ?- capital_of(A,​B),​ write(B), write('​ to stolica '), write(A), nl, fail. 
-</​code>​ 
- 
- 
-==== 2.6 Ćwiczenie: Obliczenia i operatory porównania ==== 
- 
- 
-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.7 Ćwiczenie: Prosty system ekspertowy ==== 
- 
- 
-Przetestować działanie systemu. System diagnozuje przyczyną awarii samochodu. 
- 
-Kod systemu znajduje sie w pliku {{car.pl}} 
- 
-Dodatkowo korzysta on z pliku {{getyesno.pl}} 
- 
-W systemie ekspertowym można wyróżnić następujące elementy: 
- 
-  * baza wiedzy, czasami dzielona na: właściwą bazę wiedzy (czyli tą którą system dysponuje stale, od początku/​uruchomienia) i bazę faktów, które system odkrywa, dostaje, wypracowuje, ​ 
-  * mechanizm wnioskujący,​ który przeprowadza właściwy proces wnioskowania,​ tj. odnajduje rozwiązanie/​odpowiedź ​ 
-  * mechanizm wyjaśniający,​ dlaczego jest to odpowiedź poprawna/​dopuszczalna, ​ 
-  * interfejs użytkownika,​ pozwalający na komunikację z systemem. ​ 
- 
-Rysunek 1: Struktura Systemu Ekspertowego. 
- 
-{{expert-systems-arch.png}} 
- 
-W przypadku tego systemu te elementy są odwzorowane przez: 
- 
-  * predykat defect_may_be/​1 
-  * predykat try_all_possibilities/​0,​ oraz mechanizm wnioskujący Prologu 
-  * predykat explain/1 
-  * predykaty ask_question/​1 i user_says/​2. 
- 
-====== Komentarze ====== 
-Z braku lepszego miejsca tutaj studenci wpisują komentarze natury ogólnej do tego lab. 8-) 
- 
- --- //​[[gjn@agh.edu.pl|Grzegorz J. Nalepa]] 2008/02/20 14:34// 
pl/prolog/prolog_lab/prolog_lab_2.1203514633.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (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