Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:prolog:prolog_lab:programy [2009/10/21 12:07] jsi09 |
pl:prolog:prolog_lab:programy [2019/06/27 15:50] (aktualna) |
| |
W powyższym programie predykat ''addrule/0'' dodaje (''delrule/0'' usuwa) dynamicznie regułę: | W powyższym programie predykat ''addrule/0'' dodaje (''delrule/0'' usuwa) dynamicznie regułę: |
<code prolog> | <code> |
b(X,Y):-a(X),a(Y). | b(X,Y):-a(X),a(Y). |
</code> | </code> |
Uruchomienie programu ze wskazanego pliku (''plik.pl'') z poziomu systemu operacyjnego można zrealizować za pomocą: | Uruchomienie programu ze wskazanego pliku (''plik.pl'') z poziomu systemu operacyjnego można zrealizować za pomocą: |
| |
swipl -t halt -s plik.pl | swipl -s program.pl -g go -t halt |
| |
===== -. Śledzenie pracy programu ===== | ===== -. Śledzenie pracy programu ===== |
| |
Trace points: | Trace points: |
* trace/0 - <del>ustawia trace point na wszystkich predykatach</del>, w wersji swi-prolog używanej na laboratorium, ''trace/0'' śledzi **następny zadany cel**, np. | * trace/0 - ustawia trace point na wszystkich predykatach, w wersji swi-prolog używanej na laboratorium, ''trace/0'' śledzi **następny zadany cel**, np. |
<code prolog> | <code prolog> |
?- trace,kobieta(K). | ?- trace,kobieta(K),rodzic(K,_). |
</code> | </code> |
* trace/1 - ustawia trace point na wskazanym predykacie, | * trace/1 - ustawia trace point na wskazanym predykacie, |
* ''delta/4'' -- obliczający deltę, argumenty kolejno: a, b, c, wynik, | * ''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. | * ''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://gollem.science.uva.nl/SWI-Prolog/Manual/arith.html|funkcje matematyczne]]. | 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=arith|funkcje matematyczne]], w szczególności do obliczenia pierwiastka używa się ''sqrt/1''. |
| |
===== -. Rekurencja w Prologu ===== | ===== -. Rekurencja w Prologu ===== |
| |
Wpisz, przetestuj i przemyśl działanie programu rekurencyjnie liczącego silnię. | Wpisz, przetestuj i przemyśl działanie programu rekurencyjnie liczącego silnię. |
| Uruchom program w trybie śledzenia wykonywania (trace). |
| |
| **Ćwiczenie** |
| |
| Opierając się na silni napisz program wypisujący [[http://pl.wikipedia.org/wiki/Ci%C4%85g_Fibonacciego|Ciąg Fibonacciego]]. |
| |
===== - Wybrane problemy rozwiązane w Prologu ===== | ===== - Wybrane problemy rozwiązane w Prologu ===== |
| |
| ==== Świat klocków ==== |
| Problem [[wp>Blocks_world]] |
| |
| Wczytaj {{:pl:prolog:prolog_lab:blocks.pl|}} |
| |
| Narysuj na kartce zamodelowany świat. |
| Jakie pytania można zadać? |
| <code prolog> |
| above(b1,b2). |
| above(b3,b5). |
| left(b1,b7). |
| left(b3,b3). |
| </code> |
| |
| |
| **Ćwiczenie** |
| |
| Opisz w programie taki świat: |
| <code> |
| a1 |
| a2 |
| a3 c1 c3 |
| a4 a5 c2 c4 |
| </code> |
| |
==== Wieże Hanoi ==== | ==== Wieże Hanoi ==== |
Uwaga: w Prologu operator ''\='' to nieidentyczność, czy też niemożliwość uzgodnienia termów. | Uwaga: w Prologu operator ''\='' to nieidentyczność, czy też niemożliwość uzgodnienia termów. |
| |
| ==== Dla Zainteresowanych ==== |
| Więcej ciekawych problemów [[reprezentacja_wiedzy#ciekawe_problemy|na kolejnych zajęciach]] |
| oraz w [[prolog:pllib:start|bibliotece programów]]. |
| |
===== Obserwacje ===== | ===== Obserwacje ===== |