Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Лямбда выражения.  (Прочитано 10676 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eugrita
Помогающий

ru
Offline Offline

« : 13-03-2012 22:40 » 

 В NET как VB так и C# 3.0 поддерживают так называемые лямбда-выражения.
Хочу только лишь  понять не вдаваясь в подробные детали.
Есть так наз лямбда исчисление созданное математиком Черчем для поддержки вычислимых функций - какая-то ветвь функционального программирования. Там еще используется понятия "аппликация", "b-редукция".
Так это одно и то же???
Вот что в википедии и в другом словаре
Лямбда-выражение (в программировании) — это специальный синтаксис для объявления анонимных функторов по месту их использования.
В языках программирования под «λ-исчислением» зачастую понимается механизм «анонимных функций» — callback-функций, которые можно определить прямо в том месте, где они используются, и которые имеют доступ к локальным переменным текущей функции.

а по поводу лямбда-счисления:
Аппликация это применение или вызов функции по отнош к заданному значению. соответствует общепринятой в математике записи f(a), но для λ-исчисления важно то, что f трактуется как алгоритм, вычисляющий результат по заданному входному значению.
В общем-то для программиста функция что алгоритм что формула - все едино.


Так вопросы  1)лямбда выражения в NET это реализация лямбда исчисления?
2)может ли кто-то простыми словами рассказать смысл этого?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 13-03-2012 22:51 » 

Улыбаюсь Нет, это совсем другое. См. вот тут:
https://forum.shelek.ru/index.php/topic,28409.msg277236.html#msg277236

Если всё ещё непонятно, спрашивай.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-03-2012 06:26 » 

eugrita, когда ты записываешь f(a), f - это имя функции. Т.е. это обычная функция, не лямбда. Лямбда - это анонимная функция без имени, у которой само тело функции где написано, там и вызывается сходу.

Можно на примере JavaScript:

Код: (Javascript)
// Обычная функция
function f(a) { WScript.Echo(a); }
// Вызов обычной функции.
f("Hello world");

// Лямбда-функция, сохранённая в переменной, ведёт себя как обычная функция.
var g = function(a) { WScript.Echo(a); }
// Вызов функции.
g("Hello world");

// Чистая лямбда-функция: вызывается тут же в месте её описания.
(function(a) { WScript.Echo(a); })("Hello world");

Зачем это нужно.

В .NET лямбда-функции обычно используются во втором смысле. Т.е. аргументом какого-то метода может быть функция. Если эта функция-аргумент простая, нет смысла описывать её отдельно, достаточно вставить её тело прямо в параметр, поэтому используется лямбда-функция.

Код: (Javascript)
// Функция, принимающая параметром другую функцию.
function loop(func) { for(var i = 0; i < 10; ++i) { func(i); } }

// Вызов цикла с лямбда-функцией в качестве аргумента.
// Тут мы решаем, что будем делать с i.
loop(function(i) { WScript.Echo(i); });

Кроме того в функциональных языках лямбда-функции используются как аналог области видимости переменных и для объявления переменных. Например:
Код: (Javascript)
// Значение результата длительного и тяжёлого расчёта hardCalculation() используется несколько раз.
// Написать hardCalculation() * hardCalculation() заведомо невыгодно - будет вдвое медленнее работать.
// Можно либо использовать локальную переменную в алгоритмическом стиле
// var x = hardCalculation();
// Либо в функциональном стиле описать лямбда-функцию.
(function(x) { WScript.Echo(x * x); })(hardCalculation());
// Преимущество лямбда-функции в том, что область видимости переменной x ограничена только телом лямбда-функции.
« Последнее редактирование: 14-03-2012 06:32 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines