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 .

Podobne dokumenty