对于没有计算机科学背景的人来说,计算机科学世界中的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
:
def adder(x)
-> y { x + y }
end
R
adder <- function(x) {
function(y) x + y
}
add5 <- adder(5)
add5(1)
#> [1] 6
问题内容: 在使用一些内置函数(如sorted,sum)时,我注意到 什么是lambda?它是如何工作的? 还有哪些其他功能使用key = lambda? 还有其他关键值吗? 问题答案: A是一个匿名函数: 它经常用在诸如以callable作为参数(通常是关键字形参)的函数中。您可以提供一个现有的函数,而不是那里的函数,只要它是一个可调用的对象即可。 以功能为例。它将以排序顺序返回给定的itera
本文向大家介绍什么是虚函数?什么是抽象函数?相关面试题,主要包含被问及什么是虚函数?什么是抽象函数?时的应答技巧和注意事项,需要的朋友参考一下 答: 虚函数:没有实现的,可由子类继承并重写的函数。Virtual CallSomeOne(); 抽象函数:规定其非虚子类必须实现的函数,必须被重写。public abstract void CallSomeOne();
主要内容:C语言中的函数和数学中的函数,库函数和自定义函数,参数,返回值从表面上看,函数在使用时必须带上括号,有必要的话还要传递参数,函数的执行结果也可以赋值给其它变量。例如,strcmp() 是一个用来比较字符串大小的函数,它的用法如下: str1 和 str2 是传递给 strcmp() 的参数,strcmp() 的处理结果赋值给了变量 result。 我们不妨设想一下,如果没有 strcmp() 函数,要想比较两个字符串的大小该怎么写呢?请看下面的代码: 比较字
请考虑以下示例: 这里让我感兴趣的是第一个测试。为什么它使用MyConsumer而不是Consumer?如果我有更多不同的可能消费者具有相同的lambda结构,谁有优先权呢?另外,我在测试2上所做的强制转换被我的IDE标记为。这意味着首先将lamdba创建为MyConsumer。为什么会这样? 我将IntelliJ Idea与javac一起使用。
问题内容: 在闭包的工作方式中遇到了一些奇怪的事情。考虑以下代码: 它构建了一个简单的函数数组,这些函数接受单个输入并返回该输入加数字后的结果。这些函数在循环中构造,其中迭代器从到运行。对于这些数字中的每一个,都会创建一个函数,该函数捕获并添加到函数的输入中。最后一行使用参数作为参数调用第二个函数。令我惊讶的是。 我期望一个。我的推理是:在中,所有东西都是对象,因此每个变量都是指向它的指针。为创建
我已经按照本教程使用AWS lambda创建了另一个桶的图像缩略图:http://docs.AWS.amazon.com/lambda/latest/dg/walkthrough-S3-events-adminuser-create-test-function-upload-zip-test.html 我已经完成了教程前面的所有步骤,但是当我从上面的链接在Lambda测试中运行下面的代码时 我收到