Em Haskell é possível definir funções sem lhes dar nome, através expressões lambda.
Por exemplo : \\x -> x+x ⇒ É uma função anónima que recebe um número x e devolve como resultado x+x. > (\\x -> x+x) 5 = 5
Uma expressão lambda tem a seguinte forma (a notação é inspirada no calculus):
<aside> 💡 \padrão … padrão -> expressão
</aside>
Exemplos :
> (\\x y -> x+y) 3 8 = 11
> (\\(x1,y1) (x2,y2) -> (x1+x2,y1+y2)) (3,2) (7,9) = (10,11)
> (\\(x:xs) -> xs) [1,2,3] = [2,3]
> (\\(x:xs) y -> y:xs) [1,2,3] 9 = [9,2,3]
As expressões lambda são úteis para evitar declarações de pequenas funções auxiliares.
Exemplo :
Em vez de :
trocapares :: [(a,b)] -> [(b,a)]
trocapares l = map troca l
where troca (x,y) = (y,x)
Pode-se escrever :
trocapares l = map (\\(x,y)->(y,x)) l
Exemplo :
multiplosDe :: Int -> [Int] -> [Int]
multiplosDe n xs = filter (\\x -> mod x n == 0) xs
As expressões lambda podem ser usadas na definição de funções. Por exemplo :
soma x y = x + y
soma1 = \\x y -> x + y
soma2 = \\x -> (\\y -> x + y)