什么是lambda(函数)?

发布于 2021-01-29 19:36:16

对于没有计算机科学背景的人来说,计算机科学世界中的lambda是什么?

关注者
0
被浏览
110
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看