对于没有计算机科学背景的人来说,计算机科学世界中的lambda是什么?
Lambda来自Lambda微积分,是指编程中的匿名函数。
为什么这很酷?它允许您编写快速抛出的函数而无需命名它们。它还提供了写闭包的好方法。有了这种能力,您就可以做这样的事情。
Python
def adder(x): return lambda y: x + y add5 = adder(5) add5(1) 6
从Python片段中可以看到,函数加法器接受一个参数x,并返回一个匿名函数(即lambda),该函数接受另一个参数y。该匿名函数使您可以从函数创建函数。这是一个简单的示例,但是它应该传达出lambda和闭包所具有的功能。
其他语言的例子
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
C#3.5或更高
Func<int, Func<int, int>> adder = (int x) => (int y) => x + y; // `int` declarations optional Func<int, int> 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<int, int> 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 = fn () => $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<Integer> 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稍有不同,因为您不能使用与调用函数完全相同的语法来调用lambda,但是它仍然具有lambda。
def adder(x) lambda { |y| x + y } end add5 = adder(5) add5[1] == 6
Ruby是Ruby,它是lambda的简写形式,因此您可以这样定义adder:
adder
def adder(x) -> y { x + y } end
R
adder <- function(x) { function(y) x + y } add5 <- adder(5) add5(1) #> [1] 6