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

    Лямбда-выражение - это функция. Функция отображает параметр на значение. Например, квадратичная функция в школе записывается как f(x)=x*x. Её можно записать также в виде: f: x -> x*x, что означает, что функция с именем f сопоставляет каждому X значение X*X
    Запись x -> x*x и называется в PascalABC.NET лямбда-выражением или лямбда-функцией.

Некоторые примеры лямбда-функций:

    а) Линейная функция: x -> 2*x + 3

    б) Функция, проверяющая, чётно ли x, и возвращающая True, если чётно, и False в противном случае: x -> x mod 2 = 0

Чаще всего лямбда-функции встречаются как параметры других функций. Далее будет рассмотрено множество подобных примеров.

1) Приведём пример описания процедурной переменной f, предназначенной для хранения вещественных функций с одним вещественным параметром:
    var f:real->real;

    После этого с переменной можно связать лямбда-выражение, определяющее возведение в квадрат:
    f:=x->x*x;

    Справа от стрелки указывается возвращаемое значение. Тип параметра x не указывается, так как он выводится из описания переменной f. Также операторы можно объединять:
    var f:real->real:=x->x*x;

    Теперь можно использовать возведение в квадрат с помощью функции f, например: 

Print(f(1),f(2),f(3)); //будет выведено 1 4 9.

2) Помимо одного входного и выходного значения, лямбда-выражение может как принимать и возвращать несколько значений, так и вообще не принимать или возвращать никаких значений, что продемонстрировано на примере кода ниже.

 

Стандартный Паскаль

PascalABC.NET

Нет реализации в языке

Можно реализовать в виде функций и процедур

##

var S: real-> real := x -> sqrt(sqrt(x));

var DivMod: integer-> (integer, integer) := x -> (x div 10, x mod 10);

var F: (string,string)->() := (x, y)-> Print(x + y);


Println(S(256), DivMod(144));

F('1', '2');

 

Вывод:
4 (14,4)

12



    В коде выше функция S переводит real в real и возвращает квадратный корень от квадратного корня входного числа x. Функция DivMod принимает число типа integer, а возвращает кортеж из двух чисел типа integer: целая часть от деления на 10 и остаток от деления на 10 числа x. Функция F принимает две строки на вход, но ничего не возвращает, то есть работает как процедура. Она производит объединение строк и выводит результат на экран.

    Как можно заметить, лямбда-выражение «переводит» одно значение в другое, то есть является аналогом математической функции по определению: принимает определённое значение, выполняет с ним некие действия и в конце работы выводит результат. Здесь и появляется парадигма функциональности языка PascalABC.NET, которой раньше не было в этом языке.

Последнее изменение: Понедельник, 22 мая 2023, 19:30