Las funciones de orden superior son funciones que toman funciones como argumento. Se usa en lenguajes funcionales que no se usan en C++ , aunque esto está cambiando lentamente desde que C++ 11 nos dio lambdas y ‘std::function’… y con frecuencia las personas no se dan cuenta de que ‘std::function’ es no es una herramienta que llena todos los casos de uso. En este artículo, explicaremos cómo pasar una función como argumento a una función de llamada diferente.
Sintaxis:
tipo_retorno nombre_función(función<tipo_retorno nombre_función(lista_argumentos), otros argumentos de función)
Parámetros: En la función anterior , nombre_función toma una función llamada nombre_diversión como argumento. Tanto function_name como fun_name pueden tener algunos argumentos adicionales.
A continuación se muestra la ilustración del mismo:
C++14
// C++ program to illustrate the higher // order function in C++ #include <bits/stdc++.h> using namespace std; // Function that will be passed as an // arguments to calling function bool Parser(string x) { // Check if string start // with alphabet 'R' return x[0] == 'R'; } // Function that takes function as // an arguments vector<string> Parse(vector<string> a, function<bool(string)> Parser) { vector<string> ans; // Traverse the vector a for (auto str : a) { if (Parser(str)) { ans.push_back(str); } } // Return the resultant vector return ans; } // Driver Code int main() { vector<string> dict = { "geeks", "Rxop", "Rka", "for" }; // Function Call for Higher // Order Functions vector<string> ans = Parse(dict, Parser); // Print the results for (auto str : ans) { cout << str << " "; } return 0; }
Rxop Rka
Ventajas de las funciones de orden superior :
Mediante el uso de la función de orden superior, se pueden resolver muchos problemas. Por ejemplo, para construir una función que toma una lista y otra función como su entrada, aplica esa función a cada elemento de esa lista y devuelve la nueva lista. En Haskell, esto podría hacerse muy fácilmente utilizando la función de orden superior incorporada llamada mapa. La definición del mapa es:
map :: (a -> b) -> [a] -> [b] map _ [ ] = [ ] map f (x : xs) = f x : map f xs
Aquí,
- La primera línea es la inicialización de la función.
- El símbolo de los elementos significa «es del tipo».
- [a] representa una lista de elementos similares, la entidad ha escrito después del último -> siempre es el tipo de devolución de la función. Una función en Haskell siempre devuelve solo una entidad.
- (a->b) define una función de ‘a’ a ‘b’. Usamos la recurrencia para definir el mapa,
[] denota una lista vacía y _ denota «cualquier cosa». - La segunda línea muestra que si se ingresa la lista vacía y cualquier función, la salida será una lista vacía.
- x: xs se usa para sacar elementos uno por uno de la lista, x es el primer elemento (cabeza) y xs es la lista restante (cola). : signo significa concatenación. Entonces, en pocas palabras, la tercera línea toma cada elemento de la lista y les aplica la función ‘f’ , y los concatena con la lista restante.
Publicación traducida automáticamente
Artículo escrito por Karad_1818 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA