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

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

10
задан Asad Khan 22 April 2010 в 21:45
поделиться

4 ответа

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

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

  2. В императивных языках лямбда-выражения обычно являются синонимами анонимных методов. В 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);
13
ответ дан 3 December 2019 в 22:35
поделиться

Посмотрите здесь, в MSDN

-1
ответ дан 3 December 2019 в 22:35
поделиться

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

2
ответ дан 3 December 2019 в 22:35
поделиться

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

1
ответ дан 3 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: