Języki programowania deklaratywnego dr Przemysław Juszczuk Katedra Inżynierii Wiedzy laborki 1 dr Przemysław Juszczuk Języki programowania deklaratywnego e-mail: [email protected] Konsultacje: na stronie katedry + na stronie domowej Pokój 202c budynek A pjuszczuk.pl dr Przemysław Juszczuk Języki programowania deklaratywnego Języki deklaratywne - laborki Wprowadzenie i język Prolog; Języki funkcyjne i język F #; System PC Shell; Zajęcia i warunki zaliczenia Język Prolog - kolokwium (po ok 7-8 zajęciach); Języki funkcyjne i język F # - 2 zajęcia; System PC Shell - projekt systemu ekspertowego dotyczący wybranego zagadnienia + sprawozdanie - ok 2-3 zajęć; Powtórki przed egzaminem. dr Przemysław Juszczuk Języki programowania deklaratywnego Zagadnienia - bardziej szczegółowo języki imperatywne a języki deklaratywne; wprowadzenie o paradygmatach; podstawy języka Prolog i zagadka Einsteina; środowisko i pliki pl; predykaty, fakty, zapytania; zmienne i reguły; arytmetyka; listy i rekurencja; predykaty wbudowane dr Przemysław Juszczuk Języki programowania deklaratywnego Zagadnienia - bardziej szczegółowo paradygmat funkcyjny; typy, identyfikatory, funkcje; wyrażenia lambda; system PC SHELL i składnia; projekt systemu ekspertowego; powtórki (z naciskiem na Prologa). dr Przemysław Juszczuk Języki programowania deklaratywnego Metodyka (paradygmat) programowania - czyli? Metodyka (zwana też często paradygmatem) to ustandaryzowane dla wybranego obszaru podejście do rozwiązywania problemów. sposób programowania oparty na mechanizmach udostępnianych przez wybrany język programowania; w związku z odmiennym przeznaczeniem języków programowania mogą występować istotne różnice pomiędzy poszczególnymi paradygmatami; środowisko przeważnie nie narzuca paradygmatu; dobór odpowiedniej metodyki zależy od rozwiązywanego problemu; dr Przemysław Juszczuk Języki programowania deklaratywnego Nadtypy paradygmatów Programowanie stacjonarne - tworzenie programu, uwzględniającego obliczenia wykonywane przez jeden procesor; Programowanie rozproszone - tworzenie programu, uwzględniającego obliczenia wykonywane bez współdzielenia zasobów obliczeniowych (współdzielenie danych - często rozproszonych); Programowanie równoległe - tworzenie kodu z uwzględnieniem obliczeń wykonywanych przez więcej niż jeden procesor. Konieczność synchronizacji i komunikacji; dr Przemysław Juszczuk Języki programowania deklaratywnego Typy paradygmatów Programowanie imperatywne - słynna instrukcja ”goto”; Przykłady języków: Algol, Fortran, Pascal, C. Programowanie funkcyjne - Haskell (Wartościowanie leniwe); Programowanie opisowe - VHDL (język opisu i projektowania układów cyfrowych); Programowanie logiczne - Prolog (fakty i reguły); dr Przemysław Juszczuk Języki programowania deklaratywnego Podstawowe rodzaje metodyk Programowanie liniowe - całość programu jest postrzegana jako jeden, ciągły blok; Programowanie proceduralne - dekompozycja problemu. Blok główny to szkielet programu, a poszczególne procedury i funkcje są wywoływane w określonej kolejności; Programowanie funkcyjne - wynik w programowaniu funkcyjnym otrzymywany poprzez złożenie funkcji. Przykładowo pętla zastępowana jest poprzez rekurencję. Programowanie obiektowe - klasa, obiekt, metoda, pole, enkapsulacja. Programowanie generyczne - programowanie uogólnione. Programowanie agentowe - dekompozycja kodu i wydzielenie zadań dla osobnych podprogramów/wątków/procesów. dr Przemysław Juszczuk Języki programowania deklaratywnego Stałe - definicja Symboliczna nazwa obiektów występujących w programie Stałe łańcuch znaków o dowolnej długości; pierwsza litera łańcucha mała; łańcuch może zawierać cyfry i podkreślenia; łańcuch może zawierać znaki specjalne takie jak $, , %; dowolny ciąg znaków ujęty w pojedyncze apostrofy. dr Przemysław Juszczuk Języki programowania deklaratywnego Zmienne - definicja Służą do przedstawienia nazw obiektów, które nie są w danym momencie znane. Zmienne łańcuch znaków o dowolnej długości zaczynający się dużą literą; pojedyncza duża litera; pojedynczy znak podkreślenia - reprezentujący zmienną anonimową. dr Przemysław Juszczuk Języki programowania deklaratywnego Predykaty - definicja Opisują związki zachodzące pomiędzy obiektami. Predykaty p(T1 , T2 , ..., Tn ); p - to nazwa n-argumentowego symbolu relacyjnego; Ti - termy. dr Przemysław Juszczuk Języki programowania deklaratywnego Termy złożone - definicja Termy złożone tworzone są przy pomocy innych termów oraz funktorów (symboli funkcyjnych). Termy złożone f (T1 , T2 , ..., Tn ); f - to nazwa n-argumentowego symbolu funkcyjnego; Ti - termy. Przykład termu złożonego ksiazka(autor(boleslaw,prus), ’Lalka’, 2000). dr Przemysław Juszczuk Języki programowania deklaratywnego Fakty i zapytania lubi(jan,jablko); lubi(adam,sliwka); czyta(mariusz,gazeta); lubi(wojtek,gazeta); ?-lubi(adam,sliwka). ?-czyta(adam,gazeta). Fakty Podaj kilka przykładów faktów a następnie zadaj pytania dotyczące tych faktów. dr Przemysław Juszczuk Języki programowania deklaratywnego Koniunkcje - zapytania łączone lubi(jan,jablko); lubi(adam,sliwka); czyta(mariusz,gazeta); lubi(wojtek,gazeta); lubi(adam, jablko); ?-lubi(adam,sliwka), lubi(adam,jablko). ?-czyta(adam,gazeta), czyta(adam,ksiazka). dr Przemysław Juszczuk Języki programowania deklaratywnego Alternatywa - zapytania łączone lubi(jan,jablko); lubi(adam,sliwka); czyta(mariusz,gazeta); lubi(wojtek,gazeta); lubi(adam, jablko); Alternatywa oznaczana jest przy pomocy średnika. ?-lubi(adam,sliwka); lubi(adam,jablko). ?-czyta(adam,gazeta); czyta(adam,ksiazka). dr Przemysław Juszczuk Języki programowania deklaratywnego Zagadka Einsteina Przeczytaj tekst dotyczący zagadki Einsteina. Porównaj rozwiązanie napisane w języku imperatywnym oraz deklaratywnym (materiały można pobrać ze strony pjuszczuk.pl). dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie - dopisz fakty siostra(ala,michal); wnuczek(jakub,miroslaw). dr Przemysław Juszczuk Języki programowania deklaratywnego siostra(ala,michal). ojciec(janusz,ala). ojciec(janusz,michala). matka(halina,ala). matka(halina,michal). dr Przemysław Juszczuk Języki programowania deklaratywnego wnuczek(jakub,miroslaw). ojciec(janusz,jakub). ojciec(miroslaw,janusz). /lub syn(jakub,janusz). syn(janusz,miroslaw). dr Przemysław Juszczuk Języki programowania deklaratywnego