Funkcja wyższego rzędu - Encyklopedia

Funkcja wyższego rzędu

Z Wikipedii

Skocz do: nawigacji, szukaj

Funkcja wyższego rzędu (ang. higher-order function) - w informatyce jest to funkcja, która zwraca lub przyjmuje jako argument inne funkcje. Tego rodzaju funkcje są powszechnie stosowane w językach funkcyjnych, jak SML, Ocaml, Haskell, jak również w Pythonie.

Funkcje wyższego rzędu służą często do dostarczenia generycznych realizacji algorytmów, zaś programista parametryzuje je własnymi funkcjami (nierzadko bardzo prostymi, patrz przykład niżej). W bibliotekach standardowych są spotykane:

  • map (funkcja, lista) — zwraca nowÄ… listÄ™, zawierajÄ…cÄ… wyniki funkcji dla każdego elementu z wejÅ›ciowej listy ([x_1, x_2, \ldots, x_n] \quad\rightarrow\quad [f(x_1), f(x_2), \ldots, f(x_n)]);
  • filter (funkcja, lista) — zwraca nowÄ… listÄ™, skÅ‚adajÄ…cÄ… siÄ™ tylko z tych elementów listy wejÅ›ciowej, dla których funkcja (predykat) zwróciÅ‚a prawdÄ™;
  • foldl (wartość poczÄ…tkowa, funkcja, lista) (fold left) — dla wszystkich elementów listy wywoÅ‚ywana jest funkcja, która przyjmuje dwa argumenty - wartość z listy, oraz wynik dla poprzedniego elementu (x_0, [x_1, x_2, \ldots, x_n] \quad\rightarrow\quad f(f(f(x_0, x_1), x_2) \ldots x_n)]);
  • foldr (wartość poczÄ…tkowa, funkcja, lista) (fold right) — dziaÅ‚anie analogiczne do foldl, z tym że lista jest przeglÄ…dana od koÅ„ca.

Przykład ich wykorzystania w SML-u:

fun kwadrat x = x*x;                        (* funkcja podnoszÄ…ca do kwadratu *)

val L = map kwadrat [1,2,3,4,5];            (* L = [1,4,9,16,25] *)

fun niezerowe x = x <> 0;                   (* funkcja zwraca prawdÄ™ gdy x nie jest zerem *)

val L = filter niezerowe [0,1,0,0,5,0,0,0]; (* L = [1,5] *)

fun suma (x, y)    = x+y;                   (* funkcja zwraca sumę dwóch liczb *)
fun iloczyn (x, y) = x*y;                   (* ta natomiast iloczyn  *)

val S = foldl suma    0 [1,2,3,4,5];        (* S = 0+1+2+3+4+5 = 15  *)
val I = foldl iloczyn 1 [1,2,3,4,5];        (* I = 1*1*2*3*4*5 = 120 *)

Funkcje wyższego rzędu mogą również zwracać inne funkcje, co jest wykorzystywane m.in w curryingu, czyli transformacji funkcji w taki sposób, żeby zamiast przyjmowania ciągu argumentów (krotki), przyjmowała tylko jeden, pierwszy argument, oraz zwracała funkcję przyjmującą kolejne argumenty. Np. w wyliczeniu funkcji podano, że funkcja map przyjmuje dwa argumenty (krotkę dwuelementową): funkcję oraz listę; natomiast w przykładowym programie map w istocie przyjmuje jeden argument - funkcję użytkownika, zwraca zaś funkcję przyjmującą jako argument listę i to dopiero ona zwraca ostateczny wynik obliczeń:

val NZ = map niezerowe;                     (* NZ jest funkcjÄ… *)
val L1 = NZ [0,1,0,0,5,0,0,0];	            (* L1 = [1,5]      *)
val L2 = NZ [0,0,0,0];                      (* L2 = []         *)

[edytuj] Zobacz też


Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /www/motocykle_www/spam/mo/richFeeds.php on line 59

PO i PiS obroniły CBA
Sejm odrzucił w pierwszym czytaniu projekt nowelizacji ustawy o Centralnym Biurze Antykorupcyjnym. Według projektu nadzór nad Biurem miałby objąć minister odpowiedzialny za sprawy wewnętrzne, a nie - jak dotychczas - premier.
Nelly Rokita: liberalne kobiety gorzej się sprawdzają niż konserwatywne
Nelly Rokita nie ustaje w dociekaniach na temat roli kobiet w życiu politycznym, ale i rodzinnym - wraca zatem temat życia prywatnego prezesa PiS - Na szczęście JarosÅ‚aw KaczyÅ„ski ma uroczÄ… mamÄ™, która go wspiera – powiedziaÅ‚a posÅ‚anka PiS w Radiu ZET.
Miller: kryzys skończy się porozumieniem
Według byłego premiera Leszka Millera najlepszym sposobem na zapewnienie bezpieczeństwa energetycznego Polsce jest zwiększenie własnego wydobycia gazu oraz połączenie naszej sieci rurociągów z istniejącą na Zachodzie Europy.
Kurski: ktoś miał wręczyć Tuskowi narkotest
"Dziennik": - Próbowaliśmy w różnych nieformalnych dyskusjach obsadzić jakiegoś posła, który byłby dyżurnym Palikotem i np. wręczyłby Tuskowi w czasie obrad Sejmu narkotest w tych dniach, kiedy Tusk głosił, że w młodości palił marihuanę - mówi Jacek Kurski.
Stasiak: zbudować gazoport
Szef Biura Bezpieczeństwa Narodowego uważa, dla zapewnienia bezpieczeństwa energetycznego Polski niezbędna jest budowa gazoportu. Władysław Stasiak, który był gościem Sygnałów Dnia jest zdania, że Sejm powinien przyjąć specjalną ustawę, która pozwoli na przyspieszenie budowy terminala.
Linki: Strona g³ówna