Funkcje wyższego rzędu
Transkrypt
Funkcje wyższego rzędu
Funkcje wyższego rzędu Autor: Michał Walczak Curried functions • Każda funkcja w języku Haskell oficjalnie przyjmuje tylko jeden parametr. Funkcje przyjmujące więcej niż jeden parametr nazywamy funkcjami curry. • Currying to transformacja funkcji przyjmującej wiele argumentów do funkcji przyjmującej jeden argument. Mechanizm ten można porównać do wywołań rekurencyjnych. Funkcja MAX • Funkcja max przyjmująca dwa argumenty MAX 4 5 wygląda jakby funkcja przyjmowała dwa argumenty, lecz ona najpierw przyjmuje parametr jako 4 i zwraca ją jako że jest większa od niczego a następnie przyjmuje parametr 5 i porównuje ze zwróconą wcześniej 4. Funkcje wyższego rzędu • • • • Funkcją wyższego rzędu nazywamy funkcję która jako parametr przyjmuje lub zwraca inną funkcję. Jest to bardzo istotny aspekt programowania funkcyjnego. Przykład map (add 1) [1,2,3] Wynik [2,3,4] Funkcja map przyjmuje jako parametr funkcję add która będzie użyta na każdym elemencie listy. Taki mechanizm można porównać do prostych pętli iteracyjnych. Przykład funkcji map’ • Funkcja map’ przyjmuje jako parametr: • • • funkcję która operuje na parametrach a i b listę elementów a, Wartością zwracaną będzie lista elementów b. Funkcja „filter” • Jest to funkcja która przyjmuje jako parametr funkcję która wykonywana jest na każdym elemencie listy wejściowej a wartość zwracana tej funkcji jest wartością boolowską. • W wyniku działania funkcji filter otrzymujemy listę elementów która spełnia zadany warunek. • Przykład: Funkcje Lambda • Funkcje lambda są to funkcje anonimowe wykorzystywane raz np. do przekazania jej w parametrze innej funkcji. • Do zapisu funkcji lambda używamy [\]+[lista parametrów] +[->] ([ciało funkcji]) Funkcja fold • Funkcje fold przetwarzają uporządkowane kolekcje danych (zazwyczaj listy) w celu zbudowania końcowego wyniku przy pomocy jakiejś funkcji łączącej elementy. Dwie najbardziej popularne funkcje z tej rodziny to foldr (fold right) i foldl (fold left) Operator $ • Operator $ w języku Haskell pozwala na zastąpienie nawiasów przy wywoływaniu funkcji. • Przykład: Funkcje złożone • Są to funkcje, które w matematyce opisywane są jako f(g(x)). W haskellu tworzy się je za pomocą [.] • Taki zapis pozwoli na płynne przejście z jednej funkcji do drugiej • Zapis przykładowej funkcji złożonej przy użyciu funkcji lambda • Zapis funkcji złożonej przy użyciu .