Хаскелл - лямбда-выражения
Я пытаюсь понять, что полезно и как использовать лямбда-выражения в 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]