Может кто-то объяснять меня лямбда-выражения и для чего они могут использоваться. Я погуглил для него и имею общее представление. большинство примеров дает код c#. Как насчет лямбда-выражений в простом C...?
На самом деле существуют две вещи, называемые «лямбда-выражениями», которые довольно слабо связаны:
Лямбда-выражения являются фундаментальной частью лямбда-исчисления и тесно связаны с функциональным программированием
В императивных языках лямбда-выражения обычно являются синонимами анонимных методов. В C #, например, вы можете передавать лямбда-выражение (т.е. само выражение, а не только его результат) в качестве аргумента:
C #:
someCollection.Apply (x => 2*x); // apply expression to every object in collection
// equivalent to
someCollection.Apply (delegate (int x) { return 2 * X; });
Сказав это, C не поддерживает анонимные методы. Однако вы можете использовать указатели на функции для достижения аналогичных результатов:
int multiply (int x)
{
return 2 * x;
}
...
collection_apply (some_collection, multiply);
Ответ el.pescado правильный, но в приведенном им примере легко обойтись с помощью указателя на функцию. Многие варианты использования лямбда-функций не могут быть решены с помощью указателей функций c.
Допустим, вы пишете эти функции на 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
Все они довольно просты для понимания. Теперь предположим, что вы хотите написать функцию, которая принимает y в качестве входных данных и возвращает указатель на функцию Multiply_y ():
(int)(int) *Make_Multiplier(int y) { return(Multiply_y); }
Где «Multiply_y» - это динамически созданная функция в форме Multiply_1, Multiply_2 и т. Д. Языки, которые имеют первоклассные лямбда-функции могут это сделать.
C не поддерживает выражения лямба ... если вы знаете perl, я настоятельно рекомендую книгу "Perl более высокого порядка "который даст вам отличное введение во всевозможные методы функционального программирования в знакомой (если вы знаете Perl) и практической среде.