Lambda nedir?


93

Birisi Lambda'nın ne olduğu hakkında iyi bir açıklama sağlayabilir mi? Onlar için bir etiketimiz var ve C # sorusunun sırları üzerinde duruyorlar, ancak ilk etapta ne olduklarına dair iyi bir tanım ve açıklama bulamadım.


1
Başlangıç ​​olarak Wikipedia'nın lambda hesabı makalesine ne dersiniz ? Ardından Wikipedia'nın işlevsel programlama makalesi bir takip olarak.
Thorsten79


amda ifadesi burada güzelce anlatılıyor .
Jameer Mulani

Yanıtlar:


135

Kapanışlar, lambdalar ve anonim işlevler mutlaka aynı şey değildir.

Anonim bir işlev, kendi adına sahip olmayan (veya en azından buna ihtiyaç duymayan) herhangi bir işlevdir.

Kapanış, bildirildiklerinde, kapsam dışında kaldıktan sonra bile sözlü kapsamındaki değişkenlere erişebilen bir işlevdir . Anonim işlevlerin mutlaka kapalı olması gerekmez, ancak çoğu dilde bulunurlar ve olmadıklarında daha az kullanışlı hale gelirler.

Bir lambda .. bilgisayar bilimi söz konusu olduğunda pek iyi tanımlanmamıştır. Çoğu dil bu terimi kullanmaz bile; bunun yerine, onlara sadece kapanışlar veya anon işlevleri diyecekler veya kendi terminolojilerini icat edecekler. LISP'de, bir lambda yalnızca anonim bir işlevdir. Python'da bir lambda, özellikle tek bir ifadeyle sınırlı anonim bir işlevdir; daha fazlası ve adlandırılmış bir işleve ihtiyacınız var. Lambdalar her iki dilde de kapanışlardır.



Vay canına, bu soruyu vermek için birden fazla olumlu oyum vardı. Terminolojide tıkanmış pek çok teknik cevap gördüm, ancak bu kısa ve özlü ve hemen noktaya geliyor.
Matthew Stopa

8
Sanki daha açık hale getiriyormuş gibi bir kapanışı tanımlamak için "kapat" terimini kullanmamak için +1.
Daniel

5
Kodunuzun yapısıyla (yani sözcüksel olarak) tanımlanan bazı değişkenlerin (yani bir kapsam) bulunabileceği bir bölge. Örneğin, çoğu dilde, bir işlev bir sözcük kapsamını tanımlar; işlevin içinde tanımlanan herhangi bir değişken, onun dışında erişilemez.
Eevee

19

Kapanışlar veya anonim işlevler de deniyor .. En iyi açıklamayı burada buldum . Temel olarak, bir işleve argüman olarak aktarılabilen satır içi kod bloğu.



8

Bu, yalnızca, tam teşekküllü bir işlev yazmak istemediğinizde genellikle bir temsilciye atanan, satır içi olarak bildirilen anonim bir işlevdir.

Lisp / şeması gibi dillerde, genellikle işlev parametreleri olarak oldukça özgürce aktarılırlar, ancak C # deyimi tipik olarak lambdaları, linq'deki gibi işlevlerin tembel olarak değerlendirilmesi için veya olay işleme kodunu biraz daha ayrıntılı hale getirmek için kullanılan lambdaları bulur.


5

Programlamada gerçekten 'lambda' diye bir şey yoktur. Dile vb. Bağlıdır.

Kısacası, normalde 'lambdalara sahip' bir dil, anonim işlevler veya bazı durumlarda kapanışlar için terimi kullanır. Ruby'de olduğu gibi:

f = lambda { return "this is a function with no name" }
puts f.call

4

Önceki cevaplara yanıt olarak:
-Anonim işlevlerle ilgili önemli olan şey, bir ad gerektirmemeleri değildir.
-Kapanlar ayrı bir kavramdır.
- Devasa bir wikipedia makalesi bunu daha net hale getirmiyor.

Cevabım 3 kısımda:
1. Lambda aynı zamanda bir ifade olan bir fonksiyondur. Bu önemli olan şey.
2. "Lambdas" olarak adlandırılan birçok dil, bu kısa işlevleri yazmayı daha kolay ve daha hızlı hale getirmek için biraz sözdizimsel şeker ekler , ancak bu gerekli değildir.
3. Bazı diller, lambda'nın hiçbir yan etkisinin olmamasını gerektirebilir . Bu, işlevsel anlamda daha saf bir lambda olurdu.

Bir işlev bir ifade olduğunda, o dil içinde "birinci sınıf vatandaş" dır. Onunla tüm önemli şeyleri yapabilirim:

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

1

Wikipedia'dan kısaltılmıştır: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

Lisp ve Python gibi programlama dillerinde lambda, lambda hesaplamasının ardından anonim işlevleri veya kapanmaları belirtmek için kullanılan bir operatördür.


Sanırım şu satırı kastettiniz: Lisp ve Python gibi programlama dillerinde lambda, lambda hesaplamasının ardından anonim işlevleri veya kapanmaları belirtmek için kullanılan bir operatördür. Makaleyi çoktan taradım ama kaçırdım.
Fred
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.