What is a Lambda?

2019-01-06 09:47发布

Could someone provide a good description of what a Lambda is? We have a tag for them and they're on the secrets of C# question, but I have yet to find a good definition and explanation of what they are in the first place.

7条回答
甜甜的少女心
2楼-- · 2019-01-06 10:13

In response to the previous answers:
-The important thing about anonymous functions is not that they dont require a name.
-Closures are a separate concept.
-A gigantic wikipedia article is not making this any clearer.

Here's my answer in 3 parts:
1. A lambda is a function which is also an expression. This is the important thing.
2. Many languages which implement so-called "lambdas" add some syntactic sugar to make writing these short functions easier and faster, but this is not required.
3. Some languages may require that a lambda has no side effects. That would be a more pure lambda in the functional sense.

When a function is an expression, it's a "first class citizen" within the language. I can do all the important things with it:

x = lambda(){ return "Hello World"; }

doit( 1, 2, lambda(a,b){ return a > b; }, 3 )

x = (lambda(a){ return a+1; }) + 5  // type error, not syntax error

(lambda(a,b){ print(a); log(b); })( 1, 2 )  // () is valid operator here
查看更多
贼婆χ
3楼-- · 2019-01-06 10:16

There's not really such a thing as 'a lambda' in programming. It depends on the language, etc.

In short, normally a language that 'has lambdas' uses the term for anonymous functions or, in some cases, closures. Like so, in Ruby:

f = lambda { return "this is a function with no name" }
puts f.call
查看更多
混吃等死
4楼-- · 2019-01-06 10:20

"Lambda" refers to the Lambda Calculus or to a specific lambda expression. Lambda calculus is basically a branch of logic and mathematics that deals with functions, and is the basis of functional programming languages.

~ William Riley-Land

查看更多
欢心
5楼-- · 2019-01-06 10:24

Closures, lambdas, and anonymous functions are not necessarily the same thing.

An anonymous function is any function that doesn't have (or, at least, need) its own name.

A closure is a function that can access variables that were in its lexical scope when it was declared, even after they have fallen out of scope. Anonymous functions do not necessarily have to be closures, but they are in most languages and become rather less useful when they aren't.

A lambda is.. not quite so well defined as far as computer science goes. A lot of languages don't even use the term; instead they will just call them closures or anon functions or invent their own terminology. In LISP, a lambda is just an anonymous function. In Python, a lambda is an anonymous function specifically limited to a single expression; anything more, and you need a named function. Lambdas are closures in both languages.

查看更多
Animai°情兽
6楼-- · 2019-01-06 10:27

Clipped from wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

In programming languages such as Lisp and Python, lambda is an operator used to denote anonymous functions or closures, following lambda calculus usage.

查看更多
甜甜的少女心
7楼-- · 2019-01-06 10:29

It's just an anonymous function declared inline, most typically assigned to a delegate when you don't want to write a full-fledged function.

In languages like lisp/scheme, they're often passed around quite liberally as function parameters, but the idiom in C# typically finds lambdas used only for lazy evaluation of functions, as in linq, or for making event-handling code a bit terser.

查看更多
登录 后发表回答