Jezyki programowania deklaratywnego

Transkrypt

Jezyki programowania deklaratywnego
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