Programowanie funkcyjne: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Kubica (dyskusja | edycje)
Nie podano opisu zmian
Kubica (dyskusja | edycje)
 
(Nie pokazano 38 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.   
Laboratoria obejmują praktyczną naukę 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
=== Wytyczne dotyczące sposobu prowadzenia ćwiczeń ===
** Przykłady strumieni
<p align="justify">
** Operacje na strumieniach
Kolejnym wykładom towarzyszą strony z materiałami do ćwiczeń.
** Uwikłane definicje strumieni
Na stronach tych znajdują się zadania podzielone na "prace domowe" i "ćwiczenia".
** Iteracje jako strumienie
W przypadku studiów internetowych, prace domowe stanowią propozycje zadań,
jakie studenci mają rozwiązywać regularnie, a rozwiązania przesyłać do
oceny prowadzącemu zajęcia.
Zadania umieszczone jako "ćwiczenia" mają charakter uzupełniający.
</p>
<p align="justify">
W przypadku studiów stacjonarnych zarówno prace domowe jak i ćwiczenia
stanowią propozycje zadań do wykorzystania w trakcie zajęć laboratoryjnych.
Zadań tych jest więcej, niż można rozwiązać w trakcie standardowych 90 minut.
Wybór zadań pozostawiamy w rękach prowadzących zajęcia.
</p>
<p align="justify">
Proponujemy, aby mniej więcej w połowie wykładów, gdy studenci poznają już
podstawy Ocamla oraz podstawowe techniki programowania funkcyjnego, aby
zaprzestać robienia prac domowych lub zadań na rzecz większego programu zaliczeniowego.
Najlepiej, aby program zaliczeniowy wykorzystywał któryś z mechanizmów charakterystyczny dla
programowania funkcyjnego, np. procedury wyższych rzędów, funktory czy strumienie.
</p>


=== Literatura ===
=== Literatura ===
# H. Abelson, G. J. Sussman, ''Struktura i interpretacja programów komputerowych'', WNT 2002.
* [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].
# X. Leroy, ''The Objective Caml system'', [http://caml.inria.fr/pub/docs/manual-ocaml/index.html]
* [Reade]  Ch. Reade, ''Elements of Functional Programming'', Addison-Wesley, 1993.
# E. Chailloux, P. Manoury, B. Pagano, ''Developing Applications with Objective Caml'', [http://caml.inria.fr/oreilly-book/]
* [L]    X. Leroy, ''The Objective Caml system'', [http://caml.inria.fr/pub/docs/manual-ocaml/index.html]
# D. Rémy, Using, ''Understanding and Unraveling the Ocaml Language'', [http://caml.inria.fr/pub/docs/u3-ocaml/]
* [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 ==
do testów:
* [[PF:Moduł Wstęp            | Wstęp – porównanie programowania funkcyjnego i imperatywnego]]
* [[PF:Moduł Podstawy        | Podstawy języka programowania Ocaml]]
inne wprowadzone z LaTeXa:
* [[Programowanie funkcyjne/Wyliczanie procesów  | Wyliczanie procesów - proces wyliczania]] ([[Programowanie funkcyjne/Wyliczanie procesów/Ćwiczenia        |Ćwiczenia]])
tekst gotowy:
* [[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]])
wprowadzone z LaTeXa:
* [[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/Model obliczeń | Model obliczeń]] ([[Programowanie funkcyjne/Model obliczeń/Ć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/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/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 imperatywne      | Programowanie imperatywne]] ([[Programowanie funkcyjne/Programowanie imperatywne/Ćwiczenia        |Ćwiczenia]])
* [[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/Techniki uleniwiania i spamiętywania | Techniki uleniwiania i spamiętywania ]] ([[Programowanie funkcyjne/Techniki uleniwiania i spamiętywania/Ć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