¿Alguien me puede explicar las expresiones lambda & para qué se pueden usar? He buscado en Google & tengo una idea aproximada. la mayoría de los ejemplos dan código C#. ¿Qué hay de las expresiones lambda en el viejo C ...?Lambda Expressions
Respuesta
En realidad, hay dos cosas que se llaman "expresiones lambda", que son más bien vagamente relacionados:
expresionesLambda son parte fundamental de lambda calculus y están estrechamente relacionados con funcionales programación
En idiomas imperativos, las expresiones lambda son generalmente sinónimos de métodos anónimos. En C#, por ejemplo, puede pasar a la expresión lambda como un argumento (es decir, una expresión en sí, no sólo su resultado.):
C#:
someCollection.Apply (x => 2*x); // apply expression to every object in collection
// equivalent to
someCollection.Apply (delegate (int x) { return 2 * X; });
Una vez dicho esto, C no soporta métodos anónimos. Puede, sin embargo, los punteros de función utilidad para lograr resultados similares:
int multiply (int x)
{
return 2 * x;
}
...
collection_apply (some_collection, multiply);
Supuestamente, Apple ha agregado algo a LLVM para agregar un tipo de expresión lambda a C (bloques de código o sth). No es un estándar oficial, sin embargo, y he olvidado los términos de búsqueda exactos. – ndim
Los bloques de código son parte de Objective-C (que Apple usa para la mayoría de sus bibliotecas de nivel superior), que es C con una sintaxis de OO añadida. –
C no soporta expresiones Lamba ... si sabe Perl, le recomiendo el libro "Perl orden superior", que le dará una una excelente introducción a todo tipo de técnicas de programación funcional en un entorno familiar (si sabes perl) y práctico.
la respuesta de el.pescado es correcta, pero el ejemplo que proporciona tiene un trabajo fácil, utilizando un puntero a la función. Muchos usos de las funciones lambda no se pueden resolver con los punteros de función de c.
Decir que escribe estas funciones en c:
int Multiply_1(int x) { return(x*1); }
int Multiply_2(int x) { return(x*2); }
int Multiply_3(int x) { return(x*3); }
int Multiply_4(int x) { return(x*4); }
etcetera, to infinity
Esos son todos bastante fácil de entender. Ahora supongamos que desea escribir una función que toma y como entrada y devuelve un puntero a la función Multiply_y():
(int)(int) *Make_Multiplier(int y) { return(Multiply_y); }
Donde "Multiply_y" es una función dinámica creada de la forma de Multiply_1, Multiply_2, etc. Los lenguajes que tienen funciones lambda de primera clase pueden hacer eso.
- 1. C# Lambda expressions y NHibernate
- 2. Lambda Expressions and Memory Management
- 3. Usando árboles Lambda Expressions con IEnumerable
- 4. MVC HTML Helpers y Lambda Expressions
- 5. Cobertura de código en Lambda Expressions
- 6. En C#, ¿hay objetos Lambda Expressions?
- 7. Uso de GroupBy, Count y Sum en LINQ Lambda Expressions
- 8. ¿De qué maneras haces uso de C# Lambda Expressions?
- 9. La mejor manera de pasar una lista de nombres de propiedades como Lambda Expressions
- 10. Expresiones Lambda de VB.NET
- 11. Cómo accedo a un elemento del diccionario utilizando Linq Expressions
- 12. Análisis de S-Expressions en Python
- 13. Cuándo no utilizar expresiones lambda
- 14. lambda devuelve lambda en python
- 15. Lambda que devuelve otra lambda
- 16. Expresión Lambda versus Statement Lambda
- 17. ¿Llamando a métodos estáticos de Spring Security Expressions?
- 18. ¿Hay un match_partial en C++ 11 Regular Expressions?
- 19. Forma correcta de analizar S-expressions en OOP
- 20. ¿Existe algo así como Common Table Expressions en PL/SQL?
- 21. Postgresql - El uso de subconsultas con alter sequence expressions
- 22. cálculo lambda
- 23. Lambda "if"?
- 24. lambda Expresiones
- 25. Expresión Lambda
- 26. Lambda Expresiones
- 27. C#: ¿Sin conversión implícita entre 'expresión lambda' y 'expresión lambda'?
- 28. ¿Cómo implementar lambda como una función llamada "lambda" en Clojure?
- 29. Cambio de parámetros de función lambda de expresión lambda
- 30. ¿Por qué las expresiones lambda se llaman expresiones lambda?
A continuación, el.pescado a continuación, ya que C es definitivamente una creación imperativa de lenguaje de método anónimo (función) no está hecho. Lo más cerca que C llega a las funciones anónimas es a través de indicadores de función como el puntero de función del comparador pasados a 'qsort (3)' (pero no son realmente anónimos ya que necesitan ser definidos y nombrados así). – msw