Politechnika Warszawska - Centralny System UwierzytelnianiaNie jesteś zalogowany | zaloguj się
katalog przedmiotów - pomoc

Programowanie funkcyjne w języku Haskell

Informacje ogólne

Kod przedmiotu: 1120-IN000-ISP-0697 Kod Erasmus / ISCED: (brak danych) / (brak danych)
Nazwa przedmiotu: Programowanie funkcyjne w języku Haskell
Jednostka: Wydział Matematyki i Nauk Informacyjnych
Grupy: Przedmioty obieralne - Inżynieria i analiza danych
Przedmioty obieralne uruchomione w sem. letnim 2018/19
Przedmioty obieralne w sem. letnim 2019/20
Przedmioty obieralne, Informatyka
Przedmioty obieralne, wydz. MiNI PW
Strona przedmiotu: http://mini.pw.edu.pl/~karwowskij/#programowanie-funkcyjne-w-języku-haskell
Punkty ECTS i inne: 4.00
Język prowadzenia: polski
Skrócony opis:

Wymagania wstępne / przedmioty poprzedzające

Elementy logiki i teorii mnogości, Programowanie 2 – obiektowe

Cel przedmiotu

Zapoznanie z paradygmatem programowania funkcyjnego, idiomami z nim związanymi. Zdobycie wiedzy o różnicy między zachłannym (ścisłym) i leniwym obliczaniem wartości.

Pełny opis:

Wykład:

1) Definicja programowania funkcyjnego, motywacja jego istnienia.

Cechy wyróżniające język Haskell,przegląd narzędzi i kompilatorów.

2) Pojęcie funkcji, definiowanie funkcji i typów funkcji. Currying i częściowe przypisanie argumentów. Składanie funkcji. Definiowanie modułów. Podstawowe typy danych.

3) Zaawansowane definicje funkcji – dopasowywanie do argumentów i warianty warunkowe. Wyrażenia warunkowe, definicje let i where.

4) Algebraiczne typy danych (ADT), definicja nowych typów danych i rekurencyjnych typów danych. Typy polimorficzne.

5) Lista jako podstawowa struktura danych w programowaniu funkcyjnym.

6) Funkcje lambda, składnia list comprehension. Przykłady list nieskończonych.

7) Klasy typów (typeclasses) – sposób definiowania i przykłady użycia.

8) Problem obsługi błędów wykonania, typy Maybe i Either wraz z przykładami użycia.

9) Monady na przykładzie Maybe i Either. Składnia do.

10) Monada IO, pierwszy samodzielny program w Haskellu. Leniwe obliczanie w IO.

11) Typy:Functor, Applicative, Monoid i przykłady ich użycia.

12) Funkcje z biblioteki standardowej operujące na monadach.

13) Lista jako monada. Użycie do symulacji obliczeń niedeterministycznych.

14) Użycie monad Listy i Maybe w backtrackingu.

15) Rozszerzenia GHC, idea reactive programming, typy GADT.

Laboratorium:

1) Definiowanie prostych funkcji rekurencyjnych i nierekurencyjnych, obsługa interpretera GHCi.

2) Definiowanie własnych rekurencyjnych typów danych, proste funkcje z wykorzystaniem pattern matching.

3) Operacje na listach.

4) Zadanie ocenianie z list i ADT.

5) Korzystanie z IO.

6) Zaawansowane użycie monad.

7) Rozwiązywanie problemów kombinatorycznych.

8) Zadanie oceniane z monad i IO.

Projekt:

Przygotowanie programu realizującego strumieniowe przetwarzanie danych na temat wybrany przez studenta wykonywany indywidualnie.

Literatura:

1. M. Lipovača, Learn You a Haskell for Great Good!, No Starch Press, 2011.

2. R. Lemmer, Haskell Design Patterns, Packt, 2015.

3. S. Marlow, Haskell 2010 language report.

4. Glasgow Haskell Compiler (GHC).

5. https://alpmestan.com/posts/2013-10-02-oh-my-laziness.html

Metody i kryteria oceniania:

Ocena na podstawie punktów cząstkowych z zajęć: 2 zadania po 20 punktów w trakcie laboratorium oraz projekt za 60 punktów oraz prezentacji w trakcie projektu. Warunkiem oceny pozytywnej jest uzyskanie w sumie przynajmniej 20 punktów w trakcie laboratorium, przynajmniej 30 punktów za projekt i nie mniej niż 51 w sumie oraz zaliczenie prezentacji na projekcie (bez punktów). Ocena końcowa według skali: [51,61) - 3,0, [61,71) - 3,5, [71,81) - 4,0, [81,91) - 4,5, >=91 5,0.

Zajęcia w cyklu "rok akademicki 2020/2021 - sem. letni" (jeszcze nie rozpoczęty)

Okres: 2021-02-22 - 2021-09-30
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Laboratorium, 15 godzin, 15 miejsc więcej informacji
Projekt, 15 godzin, 15 miejsc więcej informacji
Wykład, 15 godzin, 30 miejsc więcej informacji
Koordynatorzy: Tomasz Brengos, Jan Karwowski
Prowadzący grup: Tomasz Brengos
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę

Zajęcia w cyklu "rok akademicki 2019/2020 - sem. letni" (w trakcie)

Okres: 2020-02-22 - 2020-09-30
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Laboratorium, 15 godzin, 15 miejsc więcej informacji
Projekt, 15 godzin, 15 miejsc więcej informacji
Wykład, 15 godzin, 30 miejsc więcej informacji
Koordynatorzy: Tomasz Brengos, Jan Karwowski
Prowadzący grup: Jan Karwowski
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę

Zajęcia w cyklu "rok akademicki 2018/2019 - sem. letni" (zakończony)

Okres: 2019-02-18 - 2019-09-30
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Laboratorium, 15 godzin więcej informacji
Projekt, 15 godzin więcej informacji
Wykład, 15 godzin więcej informacji
Koordynatorzy: Tomasz Brengos, Jan Karwowski
Prowadzący grup: Jan Karwowski
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę

Zajęcia w cyklu "rok akademicki 2017/2018 - sem. letni" (zakończony)

Okres: 2018-02-19 - 2018-09-30
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Laboratorium, 15 godzin więcej informacji
Projekt, 15 godzin więcej informacji
Wykład, 15 godzin więcej informacji
Koordynatorzy: Tomasz Brengos, Jan Karwowski
Prowadzący grup: Maciej Bartoszuk, Jan Karwowski, Mateusz Pawluk
Lista studentów: (nie masz dostępu)
Zaliczenie: Przedmiot - Ocena łączna
Laboratorium - Zaliczenie
Projekt - Zaliczenie
Wykład - Zaliczenie na ocenę
Opisy przedmiotów w USOS i USOSweb są chronione prawem autorskim.
Właścicielem praw autorskich jest Politechnika Warszawska.