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_xpce [2008/04/20 13:49]
wojnicki obiekty połączone
pl:prolog:prolog_lab:prolog_lab_xpce [2019/06/27 15:50] (aktualna)
Linia 135: Linia 135:
  
 **Uwaga:** Wszystkie referencje do obiektów (rezultaty predykatu new/2) w powyższym przykładzie tworzone są automatycznie (nie są to //named references//​),​ nie trzeba stosować free/2, niszczeniem obiektów zajmie się garbage collector. **Uwaga:** Wszystkie referencje do obiektów (rezultaty predykatu new/2) w powyższym przykładzie tworzone są automatycznie (nie są to //named references//​),​ nie trzeba stosować free/2, niszczeniem obiektów zajmie się garbage collector.
 +
  
  
Linia 149: Linia 150:
         send(D, append,         send(D, append,
              ​button(ok,​ message(D, return,              ​button(ok,​ message(D, return,
-                                TI?​selection))),​+                                TI?​selection))), ​% jeżeli przycisk nacisniety, odblokuj program
         send(D, append,         send(D, append,
-             ​button(porzuc,​ message(D, return, @nil))), +             ​button(porzuc,​ message(D, return, ​  % jeżeli przycisk nacisniety, odblokuj program 
-        send(D, default_button,​ ok), % Ok: domyslny przycisk+                                    ​@nil))), 
 +        send(D, default_button,​ ok),    % Ok: domyslny przycisk
         get(D, confirm, Odpowiedz), ​    % wyswietlenie okna, zablokowanie wykonania programu         get(D, confirm, Odpowiedz), ​    % wyswietlenie okna, zablokowanie wykonania programu
-        send(D, destroy),+        send(D, destroy), ​              % analogiczne jak free(D) ​
         Odpowiedz \== @nil,             % uzytkonik nacisnal '​porzuc'​         Odpowiedz \== @nil,             % uzytkonik nacisnal '​porzuc'​
         Nazwa = Odpowiedz.         Nazwa = Odpowiedz.
Linia 200: Linia 202:
  
  
-==== Obiekty połączone ==== 
  
-Obiekty graficzne można ze sobą połączyć tworząc grupę obiektów i wykonywać transformacje (zmiana koloru, położenia etc.) na całej grupie np:+==== Obiekty złożone i połączone ==== 
 + 
 +Obiekty graficzne można ze sobą połączyć tworząc grupę obiektów ​(obiekt złożony) ​i wykonywać transformacje (zmiana koloru, położenia etc.) na całej grupie np:
  
 <code prolog> <code prolog>
Linia 216: Linia 219:
 ?-  send(@ic,​x,​100),​ send(@ic,​y,​120). ?-  send(@ic,​x,​100),​ send(@ic,​y,​120).
 </​code>​ </​code>​
 +
 +Obiekty również można ze sobą połączyć,​ tak aby modyfikacja jednego obiektu pociągała za sobą modyfikację innego. Przykład znajduje się w następnej sekcji.
  
 ==== Mysz: interakcja z obiektami graficznymi ==== ==== Mysz: interakcja z obiektami graficznymi ====
  
-TBD+Poniższy przykład umożliwia połączenie zdarzenia polegającego na przesunięciu obiektu mysza (przytrzymując lewy przycisk) z obiektem identyfikowanym przez @ic. 
 + 
 +<code prolog>​ 
 +?- send(@ic, recogniser, move_gesture(left)). 
 +</​code>​ 
 + 
 +Albo co ma się stać po dwukrotnym kliknięciu obiektu @ci: 
 + 
 +<code prolog>​ 
 +?- send(@ci, recogniser,​ 
 +           ​click_gesture(left,​ '',​ double, 
 +                         ​message(@pce,​ write_ln, hello))). 
 +</​code>​ 
 + 
 +Poniższy przykład ilustruje tworzenie i manipulację obiektów połączonych.
  
 <code prolog> <code prolog>
Linia 237: Linia 256:
         send(B1, connect, B2, @in_out_link).         send(B1, connect, B2, @in_out_link).
 </​code>​ </​code>​
 +
 ===== ĆWICZENIA ===== ===== ĆWICZENIA =====
  
Linia 242: Linia 262:
  
  
-==== Ćwiczenie ​1: Okno dialogowe ====+==== Ćwiczenie: Okno dialogowe ====
  
 Przetestuj poniższy program ((przykład zaczerpnięty z http://​hcs.science.uva.nl/​projects/​xpce/​UserGuide/​sec-4.1.html)). ''​send_list''​ działa podobnie jak ''​send''​ przu czym uruchamia wskazaną metodę z argumentami będącymi kolejnymi elementami listy. Pojedynczy predykat ''​send_list''​ zastępuje wiele predykatów ''​send''​. Przetestuj poniższy program ((przykład zaczerpnięty z http://​hcs.science.uva.nl/​projects/​xpce/​UserGuide/​sec-4.1.html)). ''​send_list''​ działa podobnie jak ''​send''​ przu czym uruchamia wskazaną metodę z argumentami będącymi kolejnymi elementami listy. Pojedynczy predykat ''​send_list''​ zastępuje wiele predykatów ''​send''​.
Linia 276: Linia 296:
 </​code>​ </​code>​
  
-==== Ćwiczenie ​2: Okno dialogowe ====+==== Ćwiczenie: Okno dialogowe ====
  
 +Rozbuduj program z Ćwiczenia 1.
 Dopisz redykat ''​show_employees/​0''​ umożliwiający przeglądanie danych pochodzących z ''​employee/​5''​. Dopisz redykat ''​show_employees/​0''​ umożliwiający przeglądanie danych pochodzących z ''​employee/​5''​.
 +W celu znalezienia odpowiednich obiektów wyświetlających dane tekstowe zobacz: [[http://​hcs.science.uva.nl/​projects/​xpce/​UserGuide/​|Programming in XPCE]].
  
-==== Ćwiczenie 3: Okna modalne ==== 
  
-TBD+==== 3 Ćwiczenie: Okna modalne ====
  
-==== Ćwiczenie ​4: Obiekty graficzne ====+Dany jest następujący kod uzupełniający przykłady z rodziny wzięte: 
 + 
 +<code prolog>​ 
 +go :- kobieta(X), wyswietl(X). 
 +go. 
 +</​code>​ 
 + 
 +Zaprogramuj predykat wyświetl, tak aby wyświetlał w oknie dialogowym 1-szy argument oraz dwa przycski: ''​Koniec'',​ ''​Nastepny''​. 
 +Okno dilogowe powinno blokować wykonanie programu, aż do naciśnięcia jednego z przycisków. 
 +Przy naciśnięciu ''​Nastepny''​ predykat zwraca fałsz wymuszając nawrót, dla ''​Koniec''​ zwraca prawdę. 
 + 
 +==== Ćwiczenie: Wizualizacja drzewa genealogicznego potomków ==== 
 + 
 +Korzystając z predykatów określających koligacje rodzinne z [[prolog lab 1]] oraz z XPCE napisz predykat generujący graf będący drzewem genealogicznym określającym potomków wskazanej osoby: 
 + 
 +  rysuj_potomek(+Kto,​+Rodzic,​+Kobieta,​+Mezczyzna) 
 + 
 +gdzie Kto to osoba, dla której zostanie wygenerowane drzewo potomków, pozostałe argumenty są nazwami predykatów określającymi odpowiednio kto jest czyim rodzicem, kto jest kobietą, kto jest mężczyzną. 
 +Przykładowe wywołanie:​ 
 + 
 +  rysuj_potomek(franek,​rodzic/​2,​kobieta/​1,​mezczyzna/​1) 
 + 
 +Wygeneruje drzewo genealogiczne potomków dla osoby franek, przy czym rodzic/2, kobieta/1, mezczyzna/1 są zdefinowanymi predykatami,​ których klauzule przechowują informacje o koligacjach rodzinnych. 
 + 
 +Podpowiedź:​ najpierw napisz predykat znajdujący potomków, potem dodaj generację danych dla [[misc:​GraphViz]],​ następnie wizualizację. 
 + 
 +==== 5 Ćwiczenie: Wizualizacja drzewa genealogicznego ==== 
 + 
 +Napisz predykat: 
 +  
 +  rysuj_drzewo(+Kto,​+Rodzic,​+Kobieta,​+Meżczyzna) 
 + 
 +rysujący kompletne drzewo dla wskazanej osoby. 
 + 
 +Przykład drzewa genealogicznego:​ 
 + 
 +{{:​pl:​prolog:​prolog_lab:​drzewo_gen_przyklad.png}} 
 + 
 + 
 +==== Ćwiczenie 6: Obiekty graficzne ====
  
 TBD TBD
 +
 +====== Uwagi, komentarze, propozycje ======
 +Tu studenci mogą wpisywać swoje uwagi.
 +
 + --- //​[[gjn@agh.edu.pl|Grzegorz J. Nalepa]] 2009/05/06 09:13//
 +
 +Wg. mnie trochę za dużo materiału - mi się udało na zajęciach zrobić tylko 3 pierwsze ćwiczenia.
 +
 + --- //Tomek Kozera 2009/05/16 21:01//
 +
 +"​Jeżeli referenca obiektu nie" Literówka - referencja powinno być
 +
 +"​Referencje może być utworzona przez new:" - jak wyżej
 +
 +"​działa podobnie jak send przu czym" - znowu literówka ;)
 +
 + ​---Anonim
 +"send można również dekomponując term, zatem powyższy przykład można zapisać jako:" -- jakiś błąd logiczny, brakuje co najmniej jednego słowa ("send można użyć(?​)"​) -- Kamil Kuduk 
pl/prolog/prolog_lab/prolog_lab_xpce.1208692173.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