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_system [2009/03/17 22:04]
gjn Links to graphviz changed to misc:graphviz
pl:prolog:prolog_lab:prolog_lab_system [2019/06/27 15:50] (aktualna)
Linia 40: Linia 40:
  
 Więcej można przeczytać na: Więcej można przeczytać na:
-  * [[http://gollem.science.uva.nl/SWI-Prolog/Manual/​initgoal.html|Initialisation files and goals]] +  * [[http://www.swi-prolog.org/pldoc/doc_for?​object=section%282%2c%20%272.3%27%2c%20swi%28%27%2fdoc%2fManual%2finitgoal.html%27%29%29|Initialisation files and goals]] 
-  * [[http://gollem.science.uva.nl/SWI-Prolog/Manual/​compilation.html|Compilation]] +  * [[http://www.swi-prolog.org/pldoc/doc_for?​object=section%282%2c%20%272.10%27%2c%20swi%28%27%2fdoc%2fManual%2fcompilation.html%27%29%29|Compilation]] 
-  * [[http://gollem.science.uva.nl/​SWI-Prolog/Manual/runtime.html|Generating Runtime Applications]]+  * [[http://www.swi-prolog.org/pldoc/doc_for?​object=section%281%2c%20%2710%27%2c%20swi%28%27%2fdoc%2fManual%2fruntime.html%27%29%29|Generating Runtime Applications]]
  
 ==== - Temat: Potoki i przekierowanie we/wy ==== ==== - Temat: Potoki i przekierowanie we/wy ====
Linia 66: Linia 66:
 ===  Potoki w Prologu === ===  Potoki w Prologu ===
  
-Do utworzenia potoku w Prologu można wykorzystać ​predykaty ​''​tell/1'',​ ''​told/​0'',​ [[http://​gollem.science.uva.nl/​SWI-Prolog/​Manual/​IO.html#​sec:​edinburghIO|oraz specjalny term pipe/1]]+Do utworzenia potoku w Prologu można wykorzystać ​predykat ​''​open/3'',​ [[http://​gollem.science.uva.nl/​SWI-Prolog/​Manual/​IO.html#​sec:​edinburghIO|oraz specjalny term pipe/1]]. 
-''​pipe/​1''​ tworzy potok, przekierowuje standardowe wyjście do wskazanej aplikacji lub potoku+W przykładzie poniżej ''​open(pipe(sort)...)''​ uruchamia aplikację systemową ''​sort''​.
-W przykładzie poniżej ''​tell(pipe(sort))''​ uruchamia aplikację systemową ''​sort''​.+
  
 <code prolog> <code prolog>
 +
 osoba(franek). osoba(franek).
 osoba(jurek). osoba(jurek).
 osoba(ania). osoba(ania).
  
-wypisz_osoby :-  +wypisz_osoby(A) :- 
-  osoba(X), write(X), nlfail. +        osoba(B), 
-wypisz_osoby.+        ​write(A, B), 
 +        write(A, '​\n'​)
 +        fail.
  
-wypisz_posortowane :-  +wypisz_posortowane :- 
-  tell(pipe(sort)),​ +        open(pipe(sort), write, A), 
-  wypisz_osoby,​  +        ​\+ ​wypisz_osoby(A)
-  told.+        ​close(A).
 </​code>​ </​code>​
 +
 ==== - Temat: GraphViz i ImageMagick ==== ==== - Temat: GraphViz i ImageMagick ====
 +
  
 [[misc:​Graphviz]] jest aplikacją służącą do wizualizacji grafów. [[misc:​Graphviz]] jest aplikacją służącą do wizualizacji grafów.
Linia 123: Linia 127:
 ==== - Metaprogramowanie i Potoki ==== ==== - Metaprogramowanie i Potoki ====
  
-Metaprogramowanie można połączyć z możliwościami jakie daje tworzenie potoków do napisania uniwersalnego programu wyświetlającego graf skierowany na podstawie faktów przechowywanych przez wskazany predykat (patrz {{:​pl:​prolog:​prolog_lab:​graph.pl}}) będący argumentem wywołania predykatu ''​dotegen/​1'',​ np.:+Metaprogramowanie można połączyć z możliwościami jakie daje tworzenie potoków do napisania uniwersalnego programu wyświetlającego graf skierowany na podstawie faktów przechowywanych przez wskazany predykat (patrz {{:​pl:​prolog:​prolog_lab:​graph2.pl}}) będący argumentem wywołania predykatu ''​dotegen/​1'',​ np.:
  
   dotgen(mojUlubionyGraf/​2).   dotgen(mojUlubionyGraf/​2).
Linia 130: Linia 134:
 Należy zwrócić uwagę, że ''​dotgen/​1''​ generuje graf pod warunkiem, że wskazany predykat reprezentujący graf ma 2 lub więcej argumentów;​ założono, że pierwsze dwa argumenty są nazwami wierzchołków tworzących krawędź. Należy zwrócić uwagę, że ''​dotgen/​1''​ generuje graf pod warunkiem, że wskazany predykat reprezentujący graf ma 2 lub więcej argumentów;​ założono, że pierwsze dwa argumenty są nazwami wierzchołków tworzących krawędź.
  
-Przykładowe wykorzystanie ​{{:​pl:​prolog:​prolog_lab:​rysuj.pl}}:+Przykładowe wykorzystanie ​//rysuj.pl//:
  
 <code prolog> <code prolog>
Linia 138: Linia 142:
 graf(jeden,​cztery). graf(jeden,​cztery).
  
-:- [graph].+:- [graph2]
 +rysuj :- 
 +        open(pipe('​dot -T png | display'​),​ write, A), 
 +        dotgen(A, graf/2), 
 +        close(A).
  
-rysuj :-  +rysuj_w ​:- 
-  tell(pipe('​dot -T png | display'​)),​ +        open(pipe('​dot -T png | display ​&'), write, A), 
-  dotgen(graf/​2),​ +        dotgen(A, graf/2), 
-  ​told. +        close(A).
- +
-rysuj_w :-  +
-  tell(pipe('​dot -T png | display &')), +
-  dotgen(graf/​2),​ +
-  told.+
 </​code>​ </​code>​
  
Linia 181: Linia 184:
 ==== - Ćwiczenie: Tworzenie potoków ==== ==== - Ćwiczenie: Tworzenie potoków ====
  
-Przeanalizuj działanie {{graph.pl}}. ​+Przeanalizuj działanie {{graph2.pl}}. ​
  
-Przetestuj i porównaj działanie predykatów ''​rysuj''​ oraz ''​rysuj_w''​ z {{rysuj.pl}}.+Przetestuj i porównaj działanie predykatów ''​rysuj''​ oraz ''​rysuj_w''​ z {{rysuj2.pl}}.
 Jaka jest różnica? dlaczego? Jaka jest różnica? dlaczego?
  
Linia 189: Linia 192:
 ==== - Ćwiczenie: Wizualizacja drzewa genealogicznego potomków ==== ==== - Ćwiczenie: Wizualizacja drzewa genealogicznego potomków ====
  
-Korzystając z predykatów określających koligacje rodzinne z [[prolog_lab_1]] oraz na podstawie {{graph.pl}} napisz predykat generujący graf będący drzewem genealogicznym określającym potomków wskazanej osoby:+Korzystając z predykatów określających koligacje rodzinne z [[pl:​prolog:​prolog_lab:​wprowadzenie]] oraz na podstawie {{graph2.pl}} napisz predykat generujący graf będący drzewem genealogicznym określającym potomków wskazanej osoby:
  
   rysuj_potomek(+Kto)   rysuj_potomek(+Kto)
Linia 204: Linia 207:
 ==== - Ćwiczenie: Wizualizacja drzewa genealogicznego potomków, metaprogramowanie ==== ==== - Ćwiczenie: Wizualizacja drzewa genealogicznego potomków, metaprogramowanie ====
  
-Korzystając z predykatów określających koligacje rodzinne z [[prolog_lab_1]] oraz na podstawie {{graph.pl}} napisz predykat generujący graf będący drzewem genealogicznym określającym potomków wskazanej osoby:+Korzystając z predykatów określających koligacje rodzinne z laboratorium ​[[wprowadzenie]] oraz na podstawie {{graph.pl}} napisz predykat generujący graf będący drzewem genealogicznym określającym potomków wskazanej osoby:
  
   rysuj_potomek(+Kto,​+Rodzic,​+Kobieta,​+Mezczyzna)   rysuj_potomek(+Kto,​+Rodzic,​+Kobieta,​+Mezczyzna)
Linia 243: Linia 246:
 {{:​pl:​prolog:​prolog_lab:​drzewo_gen_przyklad.png}} {{:​pl:​prolog:​prolog_lab:​drzewo_gen_przyklad.png}}
  
-====== ​Komentarzepropozycjewątpliwości ​======+====== ​Uwagikomentarzepropozycje ​====== 
 +Tu studenci mogą wpisywać swoje uwagi. 
 + 
 + 
 + 
 + --- //​[[gjn@agh.edu.pl|Grzegorz J. Nalepa]] 2009/05/06 09:13// 
pl/prolog/prolog_lab/prolog_lab_system.1237323843.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