Nowa wersja
|
Poprzednia wersja
|
pl:prolog:prolog_lab:wprowadzenie [2009/02/22 22:45] holownia utworzono |
pl:prolog:prolog_lab:wprowadzenie [2019/06/27 15:50] (aktualna) |
====== LAB: Wprowadzenie do środowiska Prologu ====== | ====== LAB: Wprowadzenie do środowiska Prologu ====== |
| |
| ===== -. Wprowadzenie do Prologu ===== |
===== -. WPROWADZENIE ===== | |
| |
| |
==== Temat: Czym jest Prolog ==== | |
| |
Prolog to język programowania logicznego, lub dokładniej programowania w logice (//PROgrammation en LOGique, PROgramming in LOGic//). | Prolog to język programowania logicznego, lub dokładniej programowania w logice (//PROgrammation en LOGique, PROgramming in LOGic//). |
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 języka: |
==== Rozwój: ==== | |
* podstawy teoretyczne: logika ([[wp>George_Boole]],[[wp>Gottlob_Frege]],[[wp>Alfred_Tarski]], i inni), [[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]] (University of Edinburgh) 1977 | * implementacje: [[wp>Alain_Colmerauer]], (University of Aix-Marseille), 1972; [[wp>David_H._D._Warren]] (University of Edinburgh) 1977 |
| |
| Więcej wskazówek związanych z uczeniem się Prologu można znaleźć na [[pl:prolog:prolog_lab#przydatne_materialy|głównej stronie laboratorium]]. |
| |
==== Temat: SWI Prolog ==== | ===== -. SWI Prolog ===== |
| |
Współcześnie jest dostępnych szereg implementacji Prologu, w tym swobodnie dostępne kompilatory Prologu: | Współcześnie jest dostępnych szereg implementacji Prologu, w tym swobodnie dostępne kompilatory Prologu: |
| |
| |
==== Ćwiczenie: Uruchamianie powłoki ==== | ==== Uruchamianie powłoki ==== |
| |
| **Ćwiczenie** |
| |
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''). | 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''). |
| |
| |
| ==== Środowisko pracy ==== |
==== Temat: Środowisko pracy ==== | |
| |
SWI dostarcza przede wszystkim zaawansowanej powłoki, wyposażonej w bibliotekę //GNU ReadLine//. | SWI dostarcza przede wszystkim zaawansowanej powłoki, wyposażonej w bibliotekę //GNU ReadLine//. |
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 ==== | **Ćwiczenie** |
| |
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''). | 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 ===== | ===== -. Programowanie w Prologu ===== |
| |
==== Temat: Programowanie nieklasyczne ==== | ==== Programowanie nieklasyczne ==== |
| |
Prolog NIE jest klasycznym językiem programowania. | Prolog NIE jest klasycznym językiem programowania. |
* strategii sterowania wnioskowaniem. | * strategii sterowania wnioskowaniem. |
| |
==== Temat: Pisanie programów ==== | ==== Budowa programów ==== |
| |
Elementy składniowe programu: | Elementy składniowe programu: |
| |
Program składa się z: | Program składa się z: |
| |
* szeregu //klauzul// (ang. //clause//), wyróżniamy: | * szeregu //klauzul// (ang. //clause//), wyróżniamy: |
* //fakty// (klauzule proste, formuły atomowe/atomiczne), | * //fakty// (klauzule proste, formuły atomowe/atomiczne), |
* oraz //celu// (ang. //goal//). | * oraz //celu// (ang. //goal//). |
| |
==== Ćwiczenie: Pisanie programów ==== | ==== Prosty program ==== |
| |
| **Ćwiczenie** |
| |
Proszę przyjrzeć się poniższemu, prostemu programowi (klasyczny przykład //Rodzina//). | Proszę przyjrzeć się poniższemu, prostemu programowi (klasyczny przykład //Rodzina//). |
| |
| |
| ==== Uruchamianie programu ==== |
==== 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].'') | Do uruchomienia programu należy w powłoce załadować plik z kodem w Prologu przy pomocy predykatu ''consult/1'' (skrót: ''[nazwa].'') |
| |
| |
==== Ćwiczenie: Uruchamianie programu ==== | **Ćwiczenie** |
| |
W powłoce SWI należy wczytać powyższy program: | W powłoce SWI należy wczytać powyższy program: |
Po ukazaniu się 1. odpowiedzi należy wcisnąć klawisz średnika (;). | Po ukazaniu się 1. odpowiedzi należy wcisnąć klawisz średnika (;). |
| |
==== Ćwiczenie: Baza wiedzy ==== | ==== Wyświetlanie bazy wiedzy ==== |
| |
| **Ćwiczenie** |
| |
Sprawdzić działanie predykatu ''listing/0''. | Sprawdzić działanie predykatu ''listing/0''. |
?- rodzic(_,robert). | ?- rodzic(_,robert). |
| |
==== Ćwiczenie: Praca z programem ==== | ==== Zadawanie celu (pytań) ==== |
| |
| **Ćwiczenie** |
| |
Systemowi można teraz zadawać pytania, cele do zrealizowania. | Systemowi można teraz zadawać pytania, cele do zrealizowania. |
Czy zamiast ''Y'' można wpisać inny symbol? | Czy zamiast ''Y'' można wpisać inny symbol? |
| |
==== Ćwiczenie: Rozbudowa programu ==== | ==== Rozbudowa programu ==== |
| |
| **Ćwiczenie** |
| |
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: |
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? |
| |
==== Ćwiczenie: Przykład w innym języku ==== | ==== Czy Prolog jest po polsku? ==== |
| **Ćwiczenie** |
| |
Proszę spróbować dopisać do programu takie linijki: | Proszę spróbować dopisać do programu takie linijki: |
| |
| |
==== Ćwiczenie: Reguły ==== | ==== Reguły wnioskowania ==== |
| **Ćwiczenie** |
| |
Proszę dopisać poniższe reguły i sprawdzić ich działanie. | Proszę dopisać poniższe reguły (klauzule złożone) i sprawdzić ich działanie. |
| |
<code prolog> | <code prolog> |
| |
| |
==== Ćwiczenie: Reguły rekurencyjne ==== | ==== Reguły rekurencyjne ==== |
| **Ćwiczenie** |
| |
Rekurencja jest jednym z podstawowych mechanizmów programowania w Prologu. Proszę się przyjrzeć regułom opisującym przodka: | Rekurencja jest jednym z podstawowych mechanizmów programowania w Prologu. Proszę się przyjrzeć regułom opisującym przodka: |