Programowanie deklaratywne - paradygmaty programowania

DECLARATIVE PROGRAMMING – PROGRAMMING PARADIGMS

2020L

Kod przedmiotu2317N1-PRGDEKL
Punkty ECTS 5
Typ zajęć Ćwiczenia laboratoryjne
Wykład
Przedmioty wprowadzającePodstawy logiki i teorii mnogości, Wstęp do programowania
Wymagania wstępnepodstawowe elementy programowania strukturalnego i obiektowego
Opis ćwiczeńPraktyczne zapoznanie się z deklaratywnym sposobem programowania na przykładzie języka Prolog w przypadku programowania w logice oraz języka Haskell w przypadku programowania funkcyjnego. Prolog: elementy języka i budowa programu, porównywanie i unifikacja termów, operatory i funkcje arytmetyczne, mechanizm wnioskowania Prologu, reguły rekurencyjne, struktury listowe i ich przetwarzanie, modyfikacja mechanizmu wnioskowania. Haskell: zmienne i funkcje, typy danych, warunkowe definiowanie funkcji, dopasowanie do wzorca, definicje lokalne, listy i krotki, funkcje rekurencyjne, funkcje wyższych rzędów. Zwrócenie uwagi na symboliczny sposób przetwarzania oraz rolę rekursji w obu wymienionych językach. Omówienie przykładowych zastosowań programowania deklaratywnego.
Opis wykładówPrzedstawienie deklaratywnego paradygmatu programowania na tle innych paradygmatów występujących we współczesnym programowaniu (programowanie imperatywne, obiektowe). Na programowanie deklaratywne składa się programowanie w logice i programowanie funkcyjne . Wykład zawiera podstawy teoretyczne programowania w logice: rezolucja w logice pierwszego rzędu, unifikacja termów, programy definitywne i rezolucja liniowa oraz podstawy teoretyczne programowania funkcyjnego: rachunek lambda bez typów (alfa-konwersja, beta-redukcja, własność Churcha-Rossera, definiowalność funkcji na liczbach naturalnych), podstawowe informacje na temat rachunku lambda z typami.
Cel kształceniaZapoznanie studentów z deklaratywnym (opisowym) paradygmatem programowania. Zdobycie umiejętności budowania prostych programów w języku Prolog (programowanie w logice) i Haskell (programowanie funkcyjne). Pogłębienie znajomości języków programowania. Uzyskanie szerszego spojrzenia na programowanie poprzez zapoznanie się z innym niż algorytmiczny sposobem podejścia do rozwiązywania problemów.
Literatura podstawowa1) U. Nillson, J. Małuszyński, Logic, Programming and Prolog., t. brak, John Willey & Sons, 1995, s. brak 2) W. Clocksin, C. Mellish, Prolog. Programowanie., t. brak, Helion, 2003, s. brak 3) G. Brzykcy, A. Meissner, Programowanie w Prologu i programowanie funkcyjne. Materiały do ćwiczeń., t. brak, Wydawnictwo Politechniki Poznańskiej, 1999, s. brak 4) G. Hutton, Programming in Haskell, t. brak, Cambridge University Press, 2007, s. brak
Literatura uzupełniająca1) H. Abelson, G. Sussman, J. Sussman, wyd. The MIT Press, Structure and Interpretation of Computer Programs., 1985r., tom brak, braks. 2) K. Doets, wyd. The MIT Press, From Logic to Logic Programming, 1994r., tom brak, braks. 3) L. Starling, E. Shapiro, wyd. The MIT Press, The Art of Prolog., 1999r., tom brak, braks. 4) R. Bird, wyd. Prentice Hall, Introduction to Functional Programming using Haskell., 1988r., tom brak, braks.
Uwagibrak