Różnice

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

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
pl:prolog:prolog_lab:prolog_lab_1 [2007/11/21 23:38]
root Document moved from pl:prolog:lab:prolog_lab_1
— (aktualna)
Linia 1: Linia 1:
-====== 1 LAB: Wprowadzenie do środowiska Prologu ====== 
- 
- 
-===== WPROWADZENIE ===== 
- 
- 
-==== Temat: Czym jest Prolog ==== 
- 
-Prolog to język programowania logicznego, lub dokładniej programowania w logice (PROgrammation en LOGique, PROgramming in LOGic). 
- 
-==== Rozwój: ==== 
- 
-  * podstawy teoretyczne:​ logika, Robinson (rezolucja),​ Kowalski (University of Edinburgh) 
-  * implementacje:​ Colmerauer, (University of Aix-Marseille),​ 1972; Warren (University of Edinburgh) 1977 
- 
-==== Temat: SWI Prolog ==== 
- 
-Współcześnie jest dostępnych szereg implementacji Prologu, w tym swobodnie dostępne kompilatory Prologu: 
- 
-  * Jan Wielemaker, SWI-Prolog, http://​www.swi-prolog.org 
-  * Daniel Diaz, GNU-Prolog, http://​gnu-prolog.inria.fr 
- 
-W czasie zajęć będzie się pracować głównie w środowisku SWI. 
- 
-Podstawowym interfejsem jest w SWI powłoka. W powłoce pracuje się podobnie jak w powłoce unixowej, oczywiście z uwzględnieniem specyfiki Prologu. 
- 
-==== Temat: Programy w Prologu ==== 
- 
-Elementy składniowe programu: 
- 
-  * atomy: stałe znakowe, 
-  * niewiadome/​szukane (tzw. zmienne logiczne), 
-  * termy: symbole funkcyjne przyjmujące argumenty 
- 
-Program składa się z 
- 
-  * szeregu klauzul (ang. clause), wyróżniamy:​ 
-    * fakty (klauzule proste) 
-    * reguły (klauzule złożone) 
-  * oraz celu (ang. goal) 
- 
-==== Temat: Uruchamianie programu ==== 
- 
-Do uruchomienia programu należy załadować plik z kodem w Prologu przy pomocy predykatu consult/1 (skrót [nazwa].) 
- 
-Operację tę należy powtarzać po każdej modyfikacji kodu. 
- 
-Temat: Środowisko pracy 
-SWI dostarcza przede wszystkim zaawansowanej powłoki, wyposażonej w bibliotekę GNU ReadLine. 
- 
-Cennym uzupełnieniem jest edytor GNU Emacs ze środowiskiem edycyjnym (trybem) prolog.el. 
- 
-SWI w wersji rozszerzonej o środowisko XPCE dostarcza również narzędzi programistycznych,​ takich jak wbudowany edytor emacs. 
- 
-==== Temat: Programowanie nieklasyczne ==== 
- 
-Prolog NIE jest klasycznym językiem programowania. 
- 
-Nie ma w nim: 
- 
-  * słów kluczowych, 
-  * brak rozróżnienia we/wy 
-  * brak funkcji 
-  * brak zmiennych (klasycznych) 
-  * brak jawnej sekwencyjności,​ czy iteracyjności 
- 
-Prolog dostarcza: 
- 
-  * metody strukturalizowania informacji, termy 
-  * programowania deklaratywnego 
-  * rekurencji, jak metody przetwarzania informacji 
-  * unifikacji - mechanizmy dopasowywania wzorców 
-  * rezolucji - metody wnioskowani logicznego 
-  * strategii sterowania wnioskowaniem 
- 
-===== ĆWICZENIA ===== 
- 
- 
-==== 1.1 Ćwiczenie: Uruchamianie powłoki ==== 
- 
- 
-Unix/​GNU/​Linux:​ Proszę otworzyć okno terminala, np. xterm i uruchomić w nim powłokę SWI przez polecenie swipl (może też być dostepny przez polecenie pl). 
- 
-Windows: uruchomi za pomoc ikony, menu, itp. 
- 
-UWAGA: każda //linia kodu// w Prologu musi się kończyć kropką! 
- 
-Proszę sprawdzić działanie systemu pomocy, przez predykaty help., a następnie przeczytać opis do predykatu consult/1. 
- 
-Proszę wyjść z powłoki przez halt. 
- 
-Proszę ponownie uruchomić powłokę SWI. Przy pomocy jakiej kombinacji klawiszy można wyjść z powłoki unixowej - analogiczeniw SWI? 
- 
-==== 1.2 Ćwiczenie: Pisanie programów ==== 
- 
-Proszę przyjrzeć się poniższemu,​ prostemu programowi (klasyczny przykład //​Rodzina//​). 
- 
-<code prolog> 
-rodzic(kasia,​robert). 
-rodzic(tomek,​robert). 
-rodzic(tomek,​eliza). 
- 
-kobieta(kasia). 
-kobieta(eliza). 
- 
-mezczyzna(tomek). 
-mezczyzna(robert). 
-</​code>​ 
- 
-Proszę uruchomić wybrany zewnętrzny edytor i wpisać w nim podobny program, dotyczący własnej (albo innej) rodziny. Mniej ambitni mogą po prostu przepisać... Program należy zapisać w pliku fam2.pl 
- 
-==== 1.3 Ćwiczenie: Uruchamianie programów ==== 
- 
-W powłoce SWI należy wczytać powyższy program: 
- 
-  ?- [fam2]. 
- 
-Program jest kompilowany,​ a zawarta w nim wiedza dodawana do bazy wiedzy dostępnej z powłoki SWI. Można to sprawdzić: 
- 
-  ?- kobieta(X). 
- 
-Po ukazaniu się 1. odpowiedzi należy wcisnąć klawisz średnika (;). 
- 
-==== 1.4 Ćwiczenie: Praca z programem ==== 
- 
-Systemowi można teraz zadawać pytania, cele do zrealizowania. 
- 
-Kto jest mężczyzną?​ 
- 
-  ?- mezczyzna(X). 
- 
-Czy tomek jest mężczyzną?​ 
- 
-  ?- mezczyzna(tomek). 
- 
-Czy reksio jest mężczyzną?​ 
- 
-  ?- mezczyzna(reksio). 
- 
-Czy kasia jest rodzicem robert? 
- 
-  ?- rodzic(kasia,​robert). 
- 
-Czyim rodzicem jest kasia? 
- 
-  ?- rodzic(kasia,​X). 
- 
-Czy zamiast X można wpisać inny symbol? Jaki? 
- 
-Kto jest rodzicem robert? 
- 
-  ?- rodzic(Y,​robert). 
- 
-Czy zamiast Y można wpisać inny symbol? 
- 
-==== 1.5 Ćwiczenie: Rozbudowa programu ==== 
- 
-Proszę rozbudować program do poniższej, analogicznej (co do liczby osób i zależności) formy: 
- 
-<code prolog> 
-rodzic(kasia,​robert). 
-rodzic(tomek,​robert). 
-rodzic(tomek,​eliza). 
-rodzic(robert,​anna). 
-rodzic(robert,​magda). 
-rodzic(magda,​jan). 
- 
-kobieta(kasia). 
-kobieta(eliza). 
-kobieta(magda). 
-kobieta(anna). 
- 
-mezczyzna(tomek). 
-mezczyzna(robert). 
-mezczyzna(jan). 
-</​code>​ 
- 
-Czy kolejność wpisywania linii ma znaczenie? 
- 
-UWAGA: aby dopisane fakty były dostępne dla Prologu, należy go ponownie wczytać! 
- 
-Jeżeli koniunkcję celów oznaczamy przecinkiem,​ to jak zapytać kto jest matką, a kto ojcem roberta? 
- 
-==== 1.6 Ćwiczenie: Przykład w innym języku ==== 
- 
- 
-Proszę spróbować dopisać do programu takie linijki: 
- 
-  famme(kasia). 
- 
-  homme(krzys). 
- 
-  parent(kasia,​krzys). 
- 
-Czy nazwa użytych symboli wpływa na działanie programu? 
- 
-Jakie są ograniczenia na używane symbole? 
- 
-==== 1.7 Ćwiczenie: Reguły ==== 
- 
-Proszę dopisać poniższe reguły i sprawdzić ich działanie. 
- 
-<code prolog> 
-matka(X,Y) :- 
- rodzic(X,​Y),​ 
- kobieta(X). 
- 
-ojciec(X,Y) :- 
- rodzic(X,​Y),​ 
- mezczyzna(X). 
- 
-</​code>​ 
- 
-Proszę zdefiniować reguły opisujące: brata, siostrę, dziadka i babcię. Proszę dokładnie sprawdzić ich działanie. 
- 
-Jaki pojawia się problem przy bracie/​siostrze?​ Uwaga na operator:\= 
- 
-Proszę się zastanowić nad własnymi regułami opisującymi relacje w rodzinie. 
- 
-==== 1.8 Ćwiczenie: Reguły rekurencyjne ==== 
- 
-Rekurencja jest jednym z podstawowych mechanizmów programowania w Prologu. Proszę się przyjrzeć regułom opisującej przodka: 
- 
-<code prolog> 
-przodek(X,​Y) :- 
- rodzic(X,​Y). 
- 
-przodek(X,​Z) :- 
- rodzic(X,​Y),​ 
- przodek(Y,​Z). 
-</​code>​ 
- 
-Te dwie klauzule, w tym przypadku reguły, opisują dokładnie jeden predykat: przodek/2. 
- 
-Jak zdefiniować potomka, krewnego? 
- 
-==== 1.9 Ćwiczenie: Środowisko pracy ==== 
- 
-Sprawdzić działanie systemu pomocy. 
- 
-Sprawdzić działanie systemu pracy z linią poleceń (GNU Readline): historia, dopełnianie,​ skrótu klawiaturowe. Przeglądnąć tryb pracy w GNU Emacs i edytor PCE Emacs (uruchomić SWI Prolog przez xpce). 
- 
-==== 1.10 Ćwiczenie: Obserwacje ==== 
- 
-Sprawdzić działanie predykatu listing/0. 
- 
-Sprawdzić działanie predykatu listing/1: 
- 
-  ?- listing(rodzic). 
- 
-W sytuacjach kiedy nie interesują nas wartości pewnych szukanych w predykacie, możemy użyć tzw. szukanych anonimowych. Na przykład: ,,czy Robert ma rodziców?''​ 
- 
-  ?- rodzic(_,​robert). 
- 
-Poprawny styl kodowania bardzo wpływa na przejrzystość programów w Prologu. Program w Prologu jest pewną reprezentacją wiedzy, powinien być zrozumiały dla osoby znającej jedynie notację (realcyjną) użytą w Prologu. Czytelnik kodu programu nie musi znać //​algorytmu//​ czy //modelu// (np. obiektowego),​ żeby zrozumieć program. To sam program JEST algorytmem, modelem. 
- 
-Na zakończenie:​ 
- 
-  ?- write('​Hello world'​),​ nl. 
-  
  
pl/prolog/prolog_lab/prolog_lab_1.1195684711.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