Подтвердить что ты не робот

Лямбда-выражения

Может кто-нибудь объяснить мне лямбда-выражения и для чего их можно использовать. Я задумался об этом и имею общее представление. большинство примеров дают код С#. Как насчет лямбда-выражений в простом старом C...?

4b9b3361

Ответ 1

На самом деле существуют две вещи, называемые "лямбда-выражениями", которые довольно слабо связаны:

  • Лямбда-выражения являются фундаментальной частью лямбда-исчисления и тесно связаны с функциональным программированием

  • В императивных языках лямбда-выражения обычно являются синонимами анонимных методов. Например, в С# вы можете передать лямбда-выражение (т.е. Само выражение, а не только его результат) в качестве аргумента:

С#:

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);

Ответ 2

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 и т.д. Языки, которые имеют первоклассные лямбда-функции, могут это сделать.

Ответ 3

C не поддерживает выражения lamba... если вы знаете perl, я настоятельно рекомендую книгу "более высокий порядок perl", которая даст вам отличное введение во всевозможные методы функционального программирования в знакомой (если вы знаете perl ) и практические настройки.

Ответ 4

Посмотрите здесь на MSDN