Funkcja wyższego rzędu
Z Wikipedii
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 (
); - 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 (
); - 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.
|