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

Последнее обновление: 10.12.2023

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

fun список_параметров -> действия

Определение лямбда-выражения начинается с ключевого слова fun, за которым следует список параметров. А затем через оператор -> выполняемые действия.

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

let mes = fun _ -> printfn "Hello"  // определение лямбда-выражения
mes()   // вызов лямбда-выражения

Определение параметров лямбда-выражения производится так же как и в обычной функции. А выражение, которое стоит справа от оператора ->, представляет результат лямбда-выражения.

Поскольку здесь параметр не важен, то вместо параметра указывается прочерк. Также можно использовать тип unit:

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

Другой пример - лямбда-выражение, которое принимает два параметра и возвращает сумму их значений:

let sum = fun x y -> x + y
let result = sum 10 4
printfn $"result = {result}"    // result = 14

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

let sum = fun x y ->
    printfn $"x: {x}"
    printfn $"y: {y}"
    x + y
let result = sum 10 4
printfn $"result = {result}"    // result = 14

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

Как правило, лямбда-выражения применяются там, где нам не нужно определено полноценных функций, например, при передаче функций в качестве параметра или их возвращение в качестве результата. Если мы планируем использовать некоторые действия только однократно, но проще определить лямбда-выражение. Например, при передаче параметра:

let operation x y func = func x y

let result1 = operation 10 6 (fun x y -> x+y)       // 16
printfn $"result1 = {result1}"    // result1 = 16

let result2 = operation 10 6 (fun x y -> x-y)      // 4
printfn $"result2 = {result2}"    // result2 = 4

Возвращение лямбда-выражения из функции

Другой распространенной сферой, где применяются лямбда-выражения - это возвращение функции из функции. Например, в зависимости от некоторого параметра нам надо получить определенное действие:

let operation n = 
    if n = 1 then fun x y -> x + y
    elif n = 2 then fun x y -> x - y
    elif n = 3 then fun x y -> x * y
    else fun x y -> 0

let selection = operation 1

let result1 = selection 10 7    // 17
printfn $"result1 = {result1}"  // result1 = 17

let result2 = operation 2 10 7  // 3
printfn $"result2 = {result2}"  // result2 = 3
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850