Строго объяснять не вижу смысла, поскольку придется тратить время на разъяснение массы попутных вещей, начиная от λ-исчисления и Алонзо Чёрча. Если бы Вам было понятно одно из определений, вроде "Лямбда-выражение — это анонимная функция, с которой можно создавать типы делегатов или деревьев выражений", Вы бы не стали писать сюда вопрос. Поэтому постараюсь рассказать "на пальцах" и примерах.
"Лямбды" - это функции (а также, выражения и процедуры), позволяющие эффектно в одном месте и объявить их, и использовать, причем, зачастую, даже не давая этим функциям имени (анонимные функции). Вот такие они "одноразовые".
Записывается лямбда обычно в форме t -> f(t) и читается "t переходит в f(t)". Фактически, тут много общего с обычной функцией, имеющей формальный параметр t и определяющей в своем теле значение при Конечно, параметр может быть и не один.
Изюминка "лямбд" в том, что они могут использоваться на правах простых переменных. Например, можно присвоить переменной "лямбду" и передать её, как параметр в программную единицу вместо функции, например var f:real->real:=t->3*Sin(t)+Cos(t); Tab(f,0,10,0.1);
Лямбды очень активно присутствуют в операциях, пришедших в PascalABC.NET из LINQ .Net, в частности, в проецировании и фильтрации. var n:=ArrGen(20,i->2*i+5).Where(t->Cos(t/6)<0).Count;
Последние версии PascalABC.NET 3.3 имеют очень развитые средства для программирования в функциональном стиле, построенные на "лямбдах". Примеры множественного использования лямбд можно найти в файлах, входящих в стандартную поставку, в также в Справочном руководстве по библиотеке численных методов, ставшей стандартной с версии 3.3.0.1552 от 20.10.2017 (файл \Program Files\PascalABC.NET\Doc\NumLibABC.pdf)
const n=7; begin Writeln('Исходный массив:'); var a:=MatrRandomReal(n,n,-5,5); a.Println(6); var m:=a.ElementsByRow.Min; var imin:=a.ElementsWithIndexes.Where(k->k[0]=m).Select(k->k[1]).Single; var jmin:=a.ElementsWithIndexes.Where(k->k[0]=m).Select(k->k[2]).Single; writeln('min = a[',imin+1,',',jmin+1,'] =',m:6:2); end.
"Лямбды" - это функции (а также, выражения и процедуры), позволяющие эффектно в одном месте и объявить их, и использовать, причем, зачастую, даже не давая этим функциям имени (анонимные функции). Вот такие они "одноразовые".
Записывается лямбда обычно в форме t -> f(t) и читается "t переходит в f(t)".
Фактически, тут много общего с обычной функцией, имеющей формальный параметр t и определяющей в своем теле значение при Конечно, параметр может быть и не один.
Изюминка "лямбд" в том, что они могут использоваться на правах простых переменных. Например, можно присвоить переменной "лямбду" и передать её, как параметр в программную единицу вместо функции, например
var f:real->real:=t->3*Sin(t)+Cos(t); Tab(f,0,10,0.1);
Лямбды очень активно присутствуют в операциях, пришедших в PascalABC.NET из LINQ .Net, в частности, в проецировании и фильтрации.
var n:=ArrGen(20,i->2*i+5).Where(t->Cos(t/6)<0).Count;
Последние версии PascalABC.NET 3.3 имеют очень развитые средства для программирования в функциональном стиле, построенные на "лямбдах".
Примеры множественного использования лямбд можно найти в файлах, входящих в стандартную поставку, в также в Справочном руководстве по библиотеке численных методов, ставшей стандартной с версии 3.3.0.1552 от 20.10.2017 (файл \Program Files\PascalABC.NET\Doc\NumLibABC.pdf)
const n=7;
begin
Writeln('Исходный массив:');
var a:=MatrRandomReal(n,n,-5,5); a.Println(6);
var m:=a.ElementsByRow.Min;
var imin:=a.ElementsWithIndexes.Where(k->k[0]=m).Select(k->k[1]).Single;
var jmin:=a.ElementsWithIndexes.Where(k->k[0]=m).Select(k->k[2]).Single;
writeln('min = a[',imin+1,',',jmin+1,'] =',m:6:2);
end.
Пример:
Исходный массив:
4.68 -4.11 2.18 2.34 -1.06 -0.69 1.67
4.58 3.27 1.39 4.55 0.32 0.65 -3.59
3.10 0.66 0.94 -4.27 -1.46 -3.82 -0.40
-4.90 -2.71 2.46 -1.43 -1.62 0.45 1.78
1.59 -1.07 1.60 -0.16 -1.57 -0.83 2.95
4.19 -3.16 -4.25 1.71 -4.27 1.04 -3.72
-4.16 -2.30 0.90 4.46 3.51 -4.66 2.87
min = a[4,1] = -4.90