Programowanie funkcyjne: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
|||
(Nie pokazano 36 wersji utworzonych przez 2 użytkowników) | |||
Linia 7: | Linia 7: | ||
Wykłady obejmują wprowadzenie do wybranego języka funkcyjnego | Wykłady obejmują wprowadzenie do wybranego języka funkcyjnego | ||
(Ocaml) oraz podstawowe pojęcia i techniki programowania funkcyjnego. | (Ocaml) oraz podstawowe pojęcia i techniki programowania funkcyjnego. | ||
Ćwiczenia lub laboratoria obejmują praktyczną naukę programowania funkcyjnego, | |||
zwieńczoną realizacją średniej wielkości programu. | zwieńczoną realizacją średniej wielkości programu. | ||
== Sylabus == | == Sylabus == | ||
Linia 16: | Linia 19: | ||
=== Wymagania wstępne === | === Wymagania wstępne === | ||
* Wstęp do programowania | * Wstęp do programowania | ||
* Metody programowania | |||
* Logika i teoria mnogości | * Logika i teoria mnogości | ||
=== Zawartość === | === Zawartość === | ||
* Charakterystyka paradygmatu funkcyjnego | |||
* Podstawowe konstrukcje wybranego funkcyjnego języka programowania | * Podstawowe konstrukcje wybranego funkcyjnego języka programowania | ||
** Przyrostowy tryb pracy | |||
** Wyrażenia | |||
** Definicje stałych | |||
** Definicje procedur | |||
** <math>\lambda</math>-abstrakcja | |||
** Procedury rekurencyjne | |||
** Definicje lokalne | |||
** Wyrażenia logiczne i wyrażenia warunkowe | |||
* Typy danych | * Typy danych | ||
** Proste typy wbudowane | |||
** Wzorce i konstruktory | |||
** Produkty kartezjańskie | |||
** Listy | |||
** Deklaracje typów | |||
** Rekordy | |||
** Warianty | |||
** Aliasy we wzorcach | |||
* Wyjątki | |||
** Deklarowanie wyjątków i typ <tt>exn</tt> | |||
** Podnoszenie i przechwytywanie wyjątków | |||
* Proceudry wyższych rzędów | * Proceudry wyższych rzędów | ||
** Typy procedur i polimorfizm | |||
** Przykłady procedur wyższych rzędów | |||
** Zastosowania procedur wyższych rzędów | |||
** Procedury wyższych rzędów i listy | |||
* Model obliczeń programów funkcyjnych (uproszczona semantyka operacyjna) | * Model obliczeń programów funkcyjnych (uproszczona semantyka operacyjna) | ||
** Środowiska i ramki | |||
** Semantyka definicji globalnych | |||
** Reprezentacja danych i procedur | |||
** Aplikacja procedur | |||
** Rekurencja ogonowa | |||
** Semantyka definicji lokalnych | |||
** Odśmiecanie | |||
* System typów dla fragmentu języka | * System typów dla fragmentu języka | ||
** Typy i schematy typów | |||
** Środowiska typujące | |||
** Podstawowe reguły typowania | |||
** Polimorfizm | |||
** Rekurencja | |||
** Wyjątki | |||
** Konstrukcje imperatywne i słabe zmienne typowe | |||
* Moduły i funktory | * Moduły i funktory | ||
** Struktury | |||
** Sygnatury i zależności między strukturami i sygnaturami | |||
** Funktory | |||
** Funktory wyższych rzędów | |||
* Konstrukcje imperatywne | * Konstrukcje imperatywne | ||
** Referencje | |||
** Tablice | |||
** Sekwencyjne złożenie instrukcji (<tt>;</tt>), | |||
** Pętle | |||
** Przykłady ilustrujące charakter programowania imperatywnego i jego połączenie z programowaniem funkcyjnym | |||
* Uleniwianie i spamiętywanie | * Uleniwianie i spamiętywanie | ||
** Uleniwianie obliczeń | |||
** Technika spamiętywania | |||
** Kontynuacje | |||
* Strumienie | * Strumienie | ||
** Paradygmat programowania strumieniowego | |||
** Implementacja strumieni | |||
** Przykłady strumieni | |||
** Operacje na strumieniach | |||
** Uwikłane definicje strumieni | |||
** Iteracje jako strumienie | |||
=== Literatura === | === Literatura === | ||
* [AS] H. Abelson, G. J. Sussman, ''Struktura i interpretacja programów komputerowych'', [http://www.wnt.pl/product.php?action=0&prod_id=347&hot=1 WNT 2002]. | |||
* [Reade] Ch. Reade, ''Elements of Functional Programming'', Addison-Wesley, 1993. | |||
* [L] X. Leroy, ''The Objective Caml system'', [http://caml.inria.fr/pub/docs/manual-ocaml/index.html] | |||
* [ChMP] E. Chailloux, P. Manoury, B. Pagano, ''Developing Applications with Objective Caml'', [http://caml.inria.fr/oreilly-book/] | |||
* [Remy] D. Rémy, Using, ''Understanding and Unraveling the Ocaml Language'', [http://caml.inria.fr/pub/docs/u3-ocaml/] | |||
== Moduły == | == Moduły == | ||
* [[Programowanie funkcyjne/Wstęp | Wstęp – porównanie programowania funkcyjnego i imperatywnego]] | * [[Programowanie funkcyjne/Wstęp | Wstęp – porównanie programowania funkcyjnego i imperatywnego]] | ||
* [[Programowanie funkcyjne/Podstawy | Podstawy języka programowania Ocaml]] ([[Programowanie funkcyjne/Podstawy/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/Podstawy | Podstawy języka programowania Ocaml]] ([[Programowanie funkcyjne/Podstawy/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Struktury danych | Podstawowe typy danych]] ([[Programowanie funkcyjne/Struktury danych/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/Struktury danych | Podstawowe typy danych]] ([[Programowanie funkcyjne/Struktury danych/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Procedury wyższych rzędów | Procedury wyższych rzędów]] ([[Programowanie funkcyjne/Procedury wyższych rzędów/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/Procedury wyższych rzędów | Procedury wyższych rzędów]] ([[Programowanie funkcyjne/Procedury wyższych rzędów/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Procedury wyższych rzędów i listy | Procedury wyższych rzędów i listy]] ([[Programowanie funkcyjne/Procedury wyższych rzędów i listy/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/Procedury wyższych rzędów i listy | Procedury wyższych rzędów i listy]] ([[Programowanie funkcyjne/Procedury wyższych rzędów i listy/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/ | * [[Programowanie funkcyjne/Model obliczeń | Model obliczeń]] ([[Programowanie funkcyjne/Model obliczeń/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Programowanie imperatywne | Programowanie imperatywne]] ([[Programowanie funkcyjne/Programowanie imperatywne/Ćwiczenia |Ćwiczenia]]) | |||
* [[Programowanie funkcyjne/Moduły | Moduły]] ([[Programowanie funkcyjne/Moduły/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/Moduły | Moduły]] ([[Programowanie funkcyjne/Moduły/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Funktory | Funktory]] ([[Programowanie funkcyjne/Funktory/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/Funktory | Funktory]] ([[Programowanie funkcyjne/Funktory/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Programowanie | * [[Programowanie funkcyjne/Techniki uleniwiania i spamiętywania | Techniki uleniwiania i spamiętywania ]] ([[Programowanie funkcyjne/Techniki uleniwiania i spamiętywania/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Procedury jeszcze wyższych rzędów | Procedury jeszcze wyższych rzędów]] ([[Programowanie funkcyjne/Procedury jeszcze wyższych rzędów/Ćwiczenia |Ćwiczenia]]) | |||
* [[Programowanie funkcyjne/System typów | System typów]] ([[Programowanie funkcyjne/System typów/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/System typów | System typów]] ([[Programowanie funkcyjne/System typów/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Strumienie | Strumienie]] ([[Programowanie funkcyjne/Strumienie/Ćwiczenia |Ćwiczenia]]) | * [[Programowanie funkcyjne/Strumienie | Strumienie]] ([[Programowanie funkcyjne/Strumienie/Ćwiczenia |Ćwiczenia]]) | ||
* [[Programowanie funkcyjne/Scheme | Scheme]] ([[Programowanie funkcyjne/Scheme/Ćwiczenia |Ćwiczenia]]) | |||
* [[ | |||
Aktualna wersja na dzień 10:11, 13 lis 2009
Forma zajęć
wykład (30 godz.) + laboratorium (30 godz.)
Opis
Celem przedmiotu jest przedstawienie programowania funkcyjnego – paradygmatu i stylu programowania, oraz towarzyszących mu technik programistycznych. Wykłady obejmują wprowadzenie do wybranego języka funkcyjnego (Ocaml) oraz podstawowe pojęcia i techniki programowania funkcyjnego. Ćwiczenia lub laboratoria obejmują praktyczną naukę programowania funkcyjnego, zwieńczoną realizacją średniej wielkości programu.
Sylabus
Autor
- Marcin Kubica
Wymagania wstępne
- Wstęp do programowania
- Metody programowania
- Logika i teoria mnogości
Zawartość
- Charakterystyka paradygmatu funkcyjnego
- Podstawowe konstrukcje wybranego funkcyjnego języka programowania
- Przyrostowy tryb pracy
- Wyrażenia
- Definicje stałych
- Definicje procedur
- -abstrakcja
- Procedury rekurencyjne
- Definicje lokalne
- Wyrażenia logiczne i wyrażenia warunkowe
- Typy danych
- Proste typy wbudowane
- Wzorce i konstruktory
- Produkty kartezjańskie
- Listy
- Deklaracje typów
- Rekordy
- Warianty
- Aliasy we wzorcach
- Wyjątki
- Deklarowanie wyjątków i typ exn
- Podnoszenie i przechwytywanie wyjątków
- Proceudry wyższych rzędów
- Typy procedur i polimorfizm
- Przykłady procedur wyższych rzędów
- Zastosowania procedur wyższych rzędów
- Procedury wyższych rzędów i listy
- Model obliczeń programów funkcyjnych (uproszczona semantyka operacyjna)
- Środowiska i ramki
- Semantyka definicji globalnych
- Reprezentacja danych i procedur
- Aplikacja procedur
- Rekurencja ogonowa
- Semantyka definicji lokalnych
- Odśmiecanie
- System typów dla fragmentu języka
- Typy i schematy typów
- Środowiska typujące
- Podstawowe reguły typowania
- Polimorfizm
- Rekurencja
- Wyjątki
- Konstrukcje imperatywne i słabe zmienne typowe
- Moduły i funktory
- Struktury
- Sygnatury i zależności między strukturami i sygnaturami
- Funktory
- Funktory wyższych rzędów
- Konstrukcje imperatywne
- Referencje
- Tablice
- Sekwencyjne złożenie instrukcji (;),
- Pętle
- Przykłady ilustrujące charakter programowania imperatywnego i jego połączenie z programowaniem funkcyjnym
- Uleniwianie i spamiętywanie
- Uleniwianie obliczeń
- Technika spamiętywania
- Kontynuacje
- Strumienie
- Paradygmat programowania strumieniowego
- Implementacja strumieni
- Przykłady strumieni
- Operacje na strumieniach
- Uwikłane definicje strumieni
- Iteracje jako strumienie
Literatura
- [AS] H. Abelson, G. J. Sussman, Struktura i interpretacja programów komputerowych, WNT 2002.
- [Reade] Ch. Reade, Elements of Functional Programming, Addison-Wesley, 1993.
- [L] X. Leroy, The Objective Caml system, [1]
- [ChMP] E. Chailloux, P. Manoury, B. Pagano, Developing Applications with Objective Caml, [2]
- [Remy] D. Rémy, Using, Understanding and Unraveling the Ocaml Language, [3]
Moduły
- Wstęp – porównanie programowania funkcyjnego i imperatywnego
- Podstawy języka programowania Ocaml (Ćwiczenia)
- Podstawowe typy danych (Ćwiczenia)
- Procedury wyższych rzędów (Ćwiczenia)
- Procedury wyższych rzędów i listy (Ćwiczenia)
- Model obliczeń (Ćwiczenia)
- Programowanie imperatywne (Ćwiczenia)
- Moduły (Ćwiczenia)
- Funktory (Ćwiczenia)
- Techniki uleniwiania i spamiętywania (Ćwiczenia)
- Procedury jeszcze wyższych rzędów (Ćwiczenia)
- System typów (Ćwiczenia)
- Strumienie (Ćwiczenia)
- Scheme (Ćwiczenia)