Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:prolog:prolog_lab:prolog_lab_xpce [2008/04/20 13:51] wojnicki |
pl:prolog:prolog_lab:prolog_lab_xpce [2019/06/27 15:50] (aktualna) |
| |
**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. |
| |
| |
| |
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. |
</code> | </code> |
| |
Obiekty również można ze sobą połączyć | 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> |
send(B1, connect, B2, @in_out_link). | send(B1, connect, B2, @in_out_link). |
</code> | </code> |
| |
===== ĆWICZENIA ===== | ===== ĆWICZENIA ===== |
| |
| |
| |
==== Ćwiczenie 1: Okno dialogowe ==== | ==== 1 Ć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''. |
</code> | </code> |
| |
==== Ćwiczenie 2: Okno dialogowe ==== | ==== 2 Ć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ę. |
| |
| ==== 4 Ć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 |