_Do r. akad. 2016/17 Programowanie funkcyjne było przedmiotem I2.T (JP Języki programowania i logika - 100%), od r. akad. 2017/18 - I1._
Programowanie funkcyjne jest stylem programowania opartym na obliczaniu wartości wyrażeń, w przeciwieństwie do programowania imperatywnego, wykorzystującego modyfikacje stanu programu przez instrukcje. Studenci znają już ten paradygmat z przedmiotu "Metody programowania", gdzie był wykorzystywany język Scheme, w którym jest stosowana typizacja dynamiczna.
Celem tego wykładu jest pogłębiona prezentacja programowania funkcyjnego. Paradygmat ten obecnie staje się bardzo popularny (również w językach imperatywnych), ponieważ wysoki poziom abstrakcji ułatwia składanie komponentów, a bezstanowość jest wykorzystywana w wysokopoziomowych mechanizmach programowania współbieżnego, które pozwalają pisać efektywne programy, wykorzystujące procesory wielordzeniowe.
W trakcie wykładu będą przedstawione pojęcia i techniki programowania funkcyjnego z wykorzystaniem dwóch języków z typizacją statyczną.
OCaml (język z rodziny ML) wykorzystuje ewaluację gorliwą, najpopularniejszą w implementacjach języków programowania. Pozwala też programować imperatywnie i obiektowo. Język F# z platformy .Net jest w znacznym stopniu kompatybilny z językiem OCaml.
Haskell jest czystym językiem funkcyjnym z ewaluacją leniwą.
Będzie omawiany m.in. system typów z polimorfizmem parametrycznym, funkcje wyższych rzędów, rekursja ogonowa, mechanizm dopasowania do wzorca, sygnatury, struktury, funktory i monady, klasy typów, strategie ewaluacji wyrażeń.
Na zajęciach w pracowni studenci będą pisali proste programy, których tematyka będzie zsynchronizowana z zagadnieniami, omawianymi na wykładzie.
Wymagania:
Metody programowania
Czwartki godz.12:00-12:45 (konieczne jest wcześniejsze uzgodnienie). Możliwe są też inne terminy po uzgodnieniu za pośrednictwem poczty elektronicznej: zs@cs.uni.wroc.pl.