什么是lambda(函数)?

什么是lambda(函数)?,第1张

什么是lambda(函数)?

Lambda来自Lambda微积分,是指编程中的匿名函数。

为什么这很酷?它允许您编写快速抛出的函数而无需命名它们。它还提供了写闭包的好方法。有了这种能力,您就可以做这样的事情。

Python

def adder(x):    return lambda y: x + yadd5 = 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 ? "okn" : "not okn";

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 optionalFunc<int, int> add5 = adder(5);var add6 = adder(6); // Using implicit typingDebug.Assert(add5(1) == 6);Debug.Assert(add6(-1) == 5);// Closure exampleint 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    endendadd5 = 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 }endadd5 = 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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5142942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存