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_1 [2008/10/08 09:25]
gjn
pl:prolog:prolog_lab:prolog_lab_1 [2009/02/22 14:06]
holownia usunięto
Linia 1: Linia 1:
-====== 1 LAB: Wprowadzenie do środowiska Prologu ====== +{{header>​1}} 
- +====== ​- #1 LAB: Wprowadzenie do środowiska Prologu ======
- +
-===== WPROWADZENIE ​=====+
  
  
 +===== - WPROWADZENIE =====
  
  
Linia 12: Linia 11:
  
 Uwaga: nie należy za bardzo przejmować się hasłem o Prologu w Wikipedii -- jest //źle// napisane! Uwaga: nie należy za bardzo przejmować się hasłem o Prologu w Wikipedii -- jest //źle// napisane!
 +
  
 ==== Rozwój: ==== ==== Rozwój: ====
  
-  * podstawy teoretyczne:​ logika, [[wp>​J._Alan_Robinson]] (rezolucja),​ [[wp>]] (University of Edinburgh) +  * podstawy teoretyczne:​ logika ​([[wp>​George_Boole]],​[[wp>​Gottlob_Frege]],​[[wp>​Alfred_Tarski]],​ i inni), [[wp>​J._Alan_Robinson]] (rezolucja),​ [[wp>]] (University of Edinburgh) 
-  * implementacje:​ [[wp>​Alain_Colmerauer]],​ (University of Aix-Marseille),​ 1972; [[wp>​David_H._D._Warren]]Warren ​(University of Edinburgh) 1977+  * implementacje:​ [[wp>​Alain_Colmerauer]],​ (University of Aix-Marseille),​ 1972; [[wp>​David_H._D._Warren]] (University of Edinburgh) 1977
  
  
Linia 27: Linia 27:
   * Daniel Diaz, //​GNU-Prolog//,​ http://​gnu-prolog.inria.fr   * Daniel Diaz, //​GNU-Prolog//,​ http://​gnu-prolog.inria.fr
  
-W czasie zajęć będzie się pracować ​głównie ​w środowisku SWI.+W czasie zajęć będzie się pracować 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.+Podstawowym interfejsem w SWI jest powłoka. W powłoce pracuje się podobnie jak w powłoce unixowej, oczywiście z uwzględnieniem specyfiki Prologu.
  
  
 +==== Ć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ć dostępny przez polecenie ''​pl''​).
  
 +Windows: uruchomić za pomoc ikony, menu, itp.
  
 +UWAGA: każda //linia kodu// w Prologu musi się kończyć kropką, podobnie linia, polecenie w powłoce!
  
 +Proszę sprawdzić działanie systemu pomocy, przez predykat ''​help.'',​ a następnie przeczytać opis do predykatu ''​consult/​1''​.
  
 +Proszę wyjść z powłoki przez ''​halt.''​
  
-==== Temat: Programy ​Prologu ====+Proszę ponownie uruchomić powłokę SWI. Przy pomocy jakiej kombinacji klawiszy można wyjść z powłoki unixowej - analogiczenie ​SWI?
  
-Elementy składniowe programu: 
- 
-  * //stałe//: stałe znakowe a także liczby (atomy), 
-  * //​niewiadome/​szukane//​ (odpowiadają tzw. zmiennym logicznym, które __nie__ mają zbyt wiele wspólnego z te zmiennymi w klasycznych językach programowania),​ 
-  * //termy//: symbole funkcyjne wraz z argumentami,​ obiekty strukturalnie złożone. 
- 
-Program składa się z: 
- 
-  * szeregu //klauzul// (ang. //​clause//​),​ wyróżniamy:​ 
-    * //fakty// (klauzule proste, formuły atomowe/​atomiczne),​ 
-    * //reguły// (klauzule złożone), 
-  * oraz //celu// (ang. //goal//). 
- 
- 
- 
- 
- 
-==== Temat: Uruchamianie programu ==== 
- 
-Do uruchomienia programu należy w powłoce 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 bazy wiedzy! 
  
  
Linia 72: Linia 56:
 SWI w wersji rozszerzonej o środowisko XPCE dostarcza również narzędzi programistycznych,​ takich jak wbudowany edytor //emacs//. Aby z niego skorzystać należy zamiast ''​swipl''​ wywołać ''​xpce''​ a potem w powłoce Prologu ''​emacs.''​. SWI w wersji rozszerzonej o środowisko XPCE dostarcza również narzędzi programistycznych,​ takich jak wbudowany edytor //emacs//. Aby z niego skorzystać należy zamiast ''​swipl''​ wywołać ''​xpce''​ a potem w powłoce Prologu ''​emacs.''​.
  
 +==== Ćwiczenie: Środowisko pracy ====
 +
 +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''​).
  
  
 +===== - Programowanie w Prologu =====
  
 ==== Temat: Programowanie nieklasyczne ==== ==== Temat: Programowanie nieklasyczne ====
Linia 95: Linia 83:
   * strategii sterowania wnioskowaniem.   * strategii sterowania wnioskowaniem.
  
-===== ĆWICZENIA =====+==== Temat: Pisanie programów ​====
  
 +Elementy składniowe programu:
  
 +  * //stałe//: stałe znakowe a także liczby (atomy),
 +  * //​niewiadome/​szukane//​ (odpowiadają tzw. zmiennym logicznym, które __nie__ mają zbyt wiele wspólnego ze zmiennymi w klasycznych językach programowania),​
 +  * //termy//: symbole funkcyjne wraz z argumentami,​ obiekty strukturalnie złożone.
  
 +Program składa się z:
  
 +  * szeregu //klauzul// (ang. //​clause//​),​ wyróżniamy:​
 +    * //fakty// (klauzule proste, formuły atomowe/​atomiczne),​
 +    * //reguły// (klauzule złożone),
 +  * oraz //celu// (ang. //goal//).
  
-==== 1.1 Ćwiczenie: Uruchamianie powłoki ==== +==== Ćwiczenie: Pisanie programów ====
- +
- +
-Unix/​GNU/​Linux:​ Proszę otworzyć okno terminala, np. ''​xterm''​ i uruchomić w nim powłokę SWI przez polecenie ''​swipl''​ (może też być dostępny przez polecenie ''​pl''​). +
- +
-Windows: uruchomi za pomoc ikony, menu, itp. +
- +
-UWAGA: każda //linia kodu// w Prologu musi się kończyć kropką, podobnie linia, polecenie w powłoce! +
- +
-Proszę sprawdzić działanie systemu pomocy, przez predykat ''​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//​). Proszę przyjrzeć się poniższemu,​ prostemu programowi (klasyczny przykład //​Rodzina//​).
Linia 135: Linia 116:
 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//​. 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.Ćwiczenie: Uruchamianie ​programów ​====+ 
 + 
 +==== Temat: Uruchamianie programu ==== 
 + 
 +Do uruchomienia programu należy w powłoce 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 bazy wiedzy! 
 + 
 + 
 +==== Ćwiczenie: Uruchamianie ​programu ​====
  
 W powłoce SWI należy wczytać powyższy program: W powłoce SWI należy wczytać powyższy program:
Linia 147: Linia 137:
 Po ukazaniu się 1. odpowiedzi należy wcisnąć klawisz średnika (;). Po ukazaniu się 1. odpowiedzi należy wcisnąć klawisz średnika (;).
  
 +==== Ćwiczenie: Baza wiedzy ====
  
-==== 1.4 Ćwiczenie: Praca z programem ====+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). 
 + 
 +==== Ćwiczenie: Praca z programem ====
  
 Systemowi można teraz zadawać pytania, cele do zrealizowania. Systemowi można teraz zadawać pytania, cele do zrealizowania.
Linia 159: Linia 160:
  
   ?- mezczyzna(tomek).   ?- mezczyzna(tomek).
 +
 +
  
 Czy reksio jest mężczyzną?​ Czy reksio jest mężczyzną?​
Linia 164: Linia 167:
   ?- mezczyzna(reksio).   ?- mezczyzna(reksio).
  
-Czy kasia jest rodzicem ​robert?+Czy kasia jest rodzicem ​roberta?
  
   ?- rodzic(kasia,​robert).   ?- rodzic(kasia,​robert).
Linia 180: Linia 183:
 Czy zamiast ''​Y''​ można wpisać inny symbol? Czy zamiast ''​Y''​ można wpisać inny symbol?
  
-==== 1.5 Ćwiczenie: Rozbudowa programu ====+==== Ćwiczenie: Rozbudowa programu ====
  
 Proszę rozbudować program do poniższej, analogicznej (co do liczby osób i zależności) formy: Proszę rozbudować program do poniższej, analogicznej (co do liczby osób i zależności) formy:
Linia 204: Linia 207:
 Czy kolejność wpisywania linii ma znaczenie? Czy kolejność wpisywania linii ma znaczenie?
  
-UWAGA: aby dopisane fakty były dostępne dla Prologu, należy ​go ponownie ​wczytać!+UWAGA: aby dopisane fakty były dostępne dla Prologu, należy ponownie ​załadować plik!
  
 Jeżeli koniunkcję celów oznaczamy przecinkiem,​ to jak zapytać kto jest matką, a kto ojcem roberta? 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 ==== +==== Ćwiczenie: Przykład w innym języku ====
  
 Proszę spróbować dopisać do programu takie linijki: Proszę spróbować dopisać do programu takie linijki:
Linia 225: Linia 227:
  
  
-==== 1.7 Ćwiczenie: Reguły ====+==== Ćwiczenie: Reguły ====
  
 Proszę dopisać poniższe reguły i sprawdzić ich działanie. Proszę dopisać poniższe reguły i sprawdzić ich działanie.
Linia 247: Linia 249:
  
  
-==== 1.8 Ćwiczenie: Reguły rekurencyjne ====+==== Ćwiczenie: Reguły rekurencyjne ====
  
-Rekurencja jest jednym z podstawowych mechanizmów programowania w Prologu. Proszę się przyjrzeć regułom opisującej przodka:+Rekurencja jest jednym z podstawowych mechanizmów programowania w Prologu. Proszę się przyjrzeć regułom opisującym przodka:
  
 <code prolog> <code prolog>
Linia 265: Linia 267:
  
  
-==== 1.9 Ćwiczenie: Środowisko pracy ====+====== Obserwacje ======
  
-Sprawdzić działanie systemu pomocy.+===== Styl ===== 
 +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ę (relacyjną) użytą w Prologu. Czytelnik kodu programu nie musi znać //​algorytmu//​ czy //modelu// (np. obiektowego),​ żeby zrozumieć program. To sam program JEST algorytmem, modelem.
  
-Sprawdzić działanie systemu pracy z linią poleceń ​(GNU Readline): historiadopełnianieskrótu klawiaturowePrzeglądnąć tryb pracy w GNU Emacs i edytor PCE Emacs (uruchomić SWI Prolog przez ''​xpce''​).+===== Alternatywa ===== 
 +Tak, w Prologu jest operator alternatywy ​(ang. //OR//), ale //nie//nie jest niezbędny, ani nie powinno się go używaćW praktyce ten sam efekt uzyskujemy pisząc kolejne klauzule, a zyskujemy na przejrzystości.
  
- +===== Klasyczny program ​=====
-==== 1.10 Ćwiczenie: Baza wiedzy ​==== +
- +
-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). +
-  +
-====== Obserwacje ====== +
-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ę (relacyjną) 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:​ Na zakończenie:​
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