Лямбда прибывает из Лямбда-исчисление и обращается к анонимным функциям в программировании.
, Почему это прохладно? Это позволяет Вам писать, что быстрый бросок далеко функционирует, не называя их. Это также обеспечивает хороший способ записать закрытия. С тем питанием можно сделать вещи как это.
Python
def adder(x):
return lambda y: x + y
add5 = adder(5)
add5(1)
6
, Как Вы видите от отрывка Python, функциональный сумматор, берет в аргументе x и возвращает анонимную функцию или лямбду, которая берет другой аргумент y. Та анонимная функция позволяет Вам создавать функции из функций. Это - простой пример, но он должен передать лямбды питания, и закрытия имеют.
Примеры на других языках
Perl 5
sub adder {
my ($x) = @_;
return sub {
my ($y) = @_;
$x + $y
}
}
my $add5 = adder(5);
print &$add5(1) == 6 ? "ok\n" : "not ok\n";
JavaScript
var adder = function (x) {
return function (y) {
return x + y;
};
};
add5 = adder(5);
add5(1) == 6
JavaScript (ES6)
const adder = x => y => x + y;
add5 = adder(5);
add5(1) == 6
схема
(define adder
(lambda (x)
(lambda (y)
(+ x y))))
(define add5
(adder 5))
(add5 1)
6
Func> adder =
(int x) => (int y) => x + y; // `int` declarations optional
Func add5 = adder(5);
var add6 = adder(6); // Using implicit typing
Debug.Assert(add5(1) == 6);
Debug.Assert(add6(-1) == 5);
// Closure example
int yEnclosed = 1;
Func addWithClosure =
(x) => x + yEnclosed;
Debug.Assert(addWithClosure(2) == 3);
Swift
func adder(x: Int) -> (Int) -> Int{
return { y in x + y }
}
let add5 = adder(5)
add5(1)
6
PHP
$a = 1;
$b = 2;
$lambda = function () use (&$a, &$b) {
echo $a + $b;
};
echo $lambda();
Haskell
(\x y -> x + y)
Java видит это сообщение
// The following is an example of Predicate :
// a functional interface that takes an argument
// and returns a boolean primitive type.
Predicate pred = x -> x % 2 == 0; // Tests if the parameter is even.
boolean result = pred.test(4); // true
, Lua
adder = function(x)
return function(y)
return x + y
end
end
add5 = adder(5)
add5(1) == 6 -- true
Kotlin
val pred = { x: Int -> x % 2 == 0 }
val result = pred(4) // true
Ruby
Ruby немного отличается в этом, Вы не можете назвать лямбду с помощью того же самого синтаксиса в качестве вызывания функции, но это все еще имеет лямбды.
def adder(x)
lambda { |y| x + y }
end
add5 = adder(5)
add5[1] == 6
Ruby, являющийся Ruby, существует стенография для лямбд, таким образом, можно определить adder
этот путь:
def adder(x)
-> y { x + y }
end