Хаскелл - лямбда-выражения

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

let add x y = x+y

и я могу просто позвонить

add 5 6

и получить результат 11 Я знаю, что я также могу сделать следующее:

let add = x->(y-> x+y)

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

let x -> (y->x+y)

parse error (possibly incorrect indentation or mismatched backets)

спасибо заранее!

1 ответов


многие функции Haskell являются "функциями более высокого порядка", т. е. они ожидают других функций в качестве параметров. Часто функции, которые мы хотим передать такой функции более высокого порядка, используются только один раз в программе, в этот конкретный момент. Тогда просто удобнее использовать лямбда-выражение, чем определять для этой цели новую локальную функцию.

вот пример, который фильтрует все четные числа, которые больше десяти из данного список:

ghci> filter (\ x -> even x && x > 10) [1..20]
[12,14,16,18,20]

вот еще один пример, который перебирает список и для каждого элемента x вычисляет срок x^2 + x:

ghci> map (\ x -> x^2 + x) [1..10]
[2,6,12,20,30,42,56,72,90,110]