Programowanie funkcyjne: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przemek (dyskusja | edycje)
Kubica (dyskusja | edycje)
 
(Nie pokazano 62 wersji utworzonych przez 3 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
** Przykłady strumieni
** Operacje na strumieniach
** Uwikłane definicje strumieni
** Iteracje jako strumienie


=== 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. Remy, 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 ==
* [[PF:Moduł Wstęp            | Wstęp – porównanie programowania funkcyjnego i imperatywnego]]
* [[PF:Moduł Podstawy        | Podstawy języka programowania Ocaml]]
* [[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        | Podstawy języka programowania Ocaml]] ([[Programowanie funkcyjne/Podstawy/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/Struktury danych | Podstawowe typy danych]]
* [[Programowanie funkcyjne/Struktury danych | Podstawowe typy danych]] ([[Programowanie funkcyjne/Struktury danych/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/Model obliczeń  | Model obliczeń]]
* [[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/Wyższe rzędy 1   | Procedury wyższych rzędów]]
* [[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/Wyższe rzędy 2  | Procedury wyższych rzędów i listy]]
* [[Programowanie funkcyjne/Model obliczeń | Model obliczeń]] ([[Programowanie funkcyjne/Model obliczeń/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/Wyższe rzędy 3  | Procedury jeszcze wyższych rzędów]]
* [[Programowanie funkcyjne/Programowanie imperatywne | Programowanie imperatywne]] ([[Programowanie funkcyjne/Programowanie imperatywne/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/Moduły          | Moduły]]
* [[Programowanie funkcyjne/Moduły          | Moduły]] ([[Programowanie funkcyjne/Moduły/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/Funktory        | Funktory]]
* [[Programowanie funkcyjne/Funktory        | Funktory]] ([[Programowanie funkcyjne/Funktory/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/Imperatywne      | Programowanie imperatywne]]
* [[Programowanie funkcyjne/Techniki uleniwiania i spamiętywania | Techniki uleniwiania i spamiętywania ]] ([[Programowanie funkcyjne/Techniki uleniwiania i spamiętywania/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/System typów    | System typów]]
* [[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/Uleniwianie     | Techniki uleniwiania i spamiętywania ]]
* [[Programowanie funkcyjne/System typów    | System typów]] ([[Programowanie funkcyjne/System typów/Ćwiczenia        |Ćwiczenia]])
* [[Programowanie funkcyjne/Strunmienie     | Strumienie]]
* [[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