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:programy [2009/02/25 09:38]
holownia
pl:prolog:prolog_lab:programy [2019/06/27 15:50] (aktualna)
Linia 70: Linia 70:
 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. 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 //​abolish/​1//​ pozwala usunąć predykat z bazy wiedzy. ​(np. ''​abolish(kobieta/​1).''​)
  
-Predykat //​retractall/​1//​ pozwala usunąć klauzule danego predykatu z bazy wiedzy.+Predykat //​retractall/​1//​ pozwala usunąć klauzule danego predykatu z bazy wiedzy. ​(np. ''​retractall(kobieta(K)).''​)
  
 Predykaty //see/n//, //​tell/​told//​ pozwalają na odczyt, zapis bazy wiedzy z/do pliku. Predykaty //see/n//, //​tell/​told//​ pozwalają na odczyt, zapis bazy wiedzy z/do pliku.
Linia 123: Linia 123:
  
 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>​
Linia 144: Linia 144:
 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 =====
Linia 152: Linia 151:
  
 Trace points: Trace points:
-  * trace/0 - ustawia trace point na wszystkich predykatach,​+  * 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>​ 
 +?- trace,​kobieta(K),​rodzic(K,​_). 
 +</​code>​
   * trace/1 - ustawia trace point na wskazanym predykacie,   * trace/1 - ustawia trace point na wskazanym predykacie,
-  * trace/2 - np. trace(something,​-all) - zdejmuje trace point ze wskazanego predykatu.+  * trace/2 - modyfikuje dla wskazanego predykatu śledzone zdarzenia (call, redo, exit, fail), ​np.
 +    * trace(something/1,-all) - zdejmuje trace point ze wskazanego predykatu ​//​something/​1//,​ 
 +    * trace(something,​+call) - ustawia trace point śledzący jedynie wywołania na wskazane predykaty //​something//​ o dowolnej arności.
  
 Predykat //​debugging/​0//​ wypisuje ustawione trace points. Predykat //​debugging/​0//​ wypisuje ustawione trace points.
Linia 243: Linia 247:
   * ''​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 =====
Linia 263: Linia 268:
  
 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 ====
Linia 332: Linia 366:
 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 =====
pl/prolog/prolog_lab/programy.1235551091.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