What is a lambda (function)?

后端 未结 23 2264
太阳男子
太阳男子 2020-11-22 04:47

For a person without a comp-sci background, what is a lambda in the world of Computer Science?

相关标签:
23条回答
  • 2020-11-22 05:05

    It refers to lambda calculus, which is a formal system that just has lambda expressions, which represent a function that takes a function for its sole argument and returns a function. All functions in the lambda calculus are of that type, i.e., λ : λ → λ.

    Lisp used the lambda concept to name its anonymous function literals. This lambda represents a function that takes two arguments, x and y, and returns their product:

    (lambda (x y) (* x y)) 
    

    It can be applied in-line like this (evaluates to 50):

    ((lambda (x y) (* x y)) 5 10)
    
    0 讨论(0)
  • 2020-11-22 05:05

    Imagine that you have a restaurant with a delivery option and you have an order that needs to be done in under 30 minutes. The point is clients usually don't care if you send their food by bike with a car or barefoot as long as you keep the meal warm and tied up. So lets convert this idiom to Javascript with anonymous and defined transportation functions.

    Below we defined the way of our delivering aka we define a name to a function:

    // ES5 
    var food = function withBike(kebap, coke) {
    return (kebap + coke); 
    };
    

    What if we would use arrow/lambda functions to accomplish this transfer:

    // ES6    
    const food = (kebap, coke) => { return kebap + coke };
    

    You see there is no difference for client and no time wasting to think about how to send food. Just send it.

    Btw, I don't recommend the kebap with coke this is why upper codes will give you errors. Have fun.

    0 讨论(0)
  • 2020-11-22 05:06

    In context of CS a lambda function is an abstract mathematical concept that tackles a problem of symbolic evaluation of mathematical expressions. In that context a lambda function is the same as a lambda term.

    But in programming languages it's something different. It's a piece of code that is declared "in place", and that can be passed around as a "first-class citizen". This concept appeared to be useful so that it came into almost all popular modern programming languages (see lambda functions everwhere post).

    0 讨论(0)
  • 2020-11-22 05:07

    A Lambda Function, or a Small Anonymous Function, is a self-contained block of functionality that can be passed around and used in your code. Lambda has different names in different programming languages – Lambda in Python and Kotlin, Closure in Swift, or Block in C and Objective-C. Although lambda's meaning is quite similar for these languages it has slight distinctions sometimes.

    Let's see how Lambda (Closure) works in Swift 4.2 with sorted() method – from normal function till the shortest expression:

    let coffee: [String] = ["Cappuccino", "Espresso", "Latte", "Ristretto"]
    

    1. Normal Function

    func backward(_ n1: String, _ n2: String) -> Bool {
        return n1 > n2
    }
    var reverseOrder = coffee.sorted(by: backward)
    
    
    // RESULT: ["Ristretto", "Latte", "Espresso", "Cappuccino"]
    

    2. Closure Expression

    reverseOrder = coffee.sorted(by: { (n1: String, n2: String) -> Bool in
        return n1 > n2
    })
    

    3. Inline Closure Expression

    reverseOrder = coffee.sorted(by: { (n1: String, n2: String) -> Bool in return n1 > n2 } )
    

    4. Inferring Type From Context

    reverseOrder = coffee.sorted(by: { n1, n2 in return n1 > n2 } )
    

    5. Implicit Returns from Single-Expression Closures

    reverseOrder = coffee.sorted(by: { n1, n2 in n1 > n2 } )
    

    6. Shorthand Argument Names

    reverseOrder = coffee.sorted(by: { $0 > $1 } )
    
    // $0 and $1 are closure’s first and second String arguments.
    

    7. Operator Methods

    reverseOrder = coffee.sorted(by: >)
    
    // RESULT: ["Ristretto", "Latte", "Espresso", "Cappuccino"]
    

    Hope this helps.

    0 讨论(0)
  • 2020-11-22 05:08

    A lambda function can take any number of arguments, but they contain only a single expression. ... Lambda functions can be used to return function objects. Syntactically, lambda functions are restricted to only a single expression.

    0 讨论(0)
  • 2020-11-22 05:10

    A lambda is a type of function, defined inline. Along with a lambda you also usually have some kind of variable type that can hold a reference to a function, lambda or otherwise.

    For instance, here's a C# piece of code that doesn't use a lambda:

    public Int32 Add(Int32 a, Int32 b)
    {
        return a + b;
    }
    
    public Int32 Sub(Int32 a, Int32 b)
    {
        return a - b;
    }
    
    public delegate Int32 Op(Int32 a, Int32 b);
    
    public void Calculator(Int32 a, Int32 b, Op op)
    {
        Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
    }
    
    public void Test()
    {
        Calculator(10, 23, Add);
        Calculator(10, 23, Sub);
    }
    

    This calls Calculator, passing along not just two numbers, but which method to call inside Calculator to obtain the results of the calculation.

    In C# 2.0 we got anonymous methods, which shortens the above code to:

    public delegate Int32 Op(Int32 a, Int32 b);
    
    public void Calculator(Int32 a, Int32 b, Op op)
    {
        Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
    }
    
    public void Test()
    {
        Calculator(10, 23, delegate(Int32 a, Int32 b)
        {
            return a + b;
        });
        Calculator(10, 23, delegate(Int32 a, Int32 b)
        {
            return a - b;
        });
    }
    

    And then in C# 3.0 we got lambdas which makes the code even shorter:

    public delegate Int32 Op(Int32 a, Int32 b);
    
    public void Calculator(Int32 a, Int32 b, Op op)
    {
        Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
    }
    
    public void Test()
    {
        Calculator(10, 23, (a, b) => a + b);
        Calculator(10, 23, (a, b) => a - b);
    }
    
    0 讨论(0)
提交回复
热议问题