Apa itu Lambda?

93

Bisakah seseorang memberikan gambaran yang baik tentang apa itu Lambda? Kami memiliki tag untuk mereka dan mereka berada di rahasia pertanyaan C #, tetapi saya belum menemukan definisi dan penjelasan yang baik tentang apa itu di tempat pertama.

Fred
sumber
1
Bagaimana dengan artikel kalkulus lambda Wikipedia sebagai permulaan? Kemudian artikel pemrograman fungsional Wikipedia sebagai tindak lanjut.
Thorsten79
2
kemungkinan duplikat dari Apa itu lambda (fungsi)?
nawfal
ekspresi amda dijelaskan di sini dengan indah.
Jameer Mulani

Jawaban:

135

Penutupan, lambda, dan fungsi anonim belum tentu sama.

Fungsi anonim adalah fungsi apa pun yang tidak memiliki (atau, setidaknya, membutuhkan) namanya sendiri.

Closure adalah sebuah fungsi yang dapat mengakses variabel yang berada dalam lingkup leksikal ketika dideklarasikan, bahkan setelah variabel tersebut berada di luar cakupan. Fungsi anonim tidak harus berupa closure, tetapi ada di sebagian besar bahasa dan menjadi kurang berguna jika tidak.

Lambda adalah .. tidak didefinisikan dengan baik sejauh ilmu komputer berjalan. Banyak bahasa bahkan tidak menggunakan istilah tersebut; sebaliknya mereka hanya akan menyebutnya closures atau anon functions atau menciptakan terminologi mereka sendiri. Di LISP, lambda hanyalah fungsi anonim. Dalam Python, lambda adalah fungsi anonim yang secara khusus dibatasi pada ekspresi tunggal; lebih dari itu, dan Anda membutuhkan fungsi bernama. Lambda adalah penutupan dalam kedua bahasa.

Eevee
sumber
istilah ini mungkin dimaksudkan untuk menyiratkan lambda kalkulus en.wikipedia.org/wiki/Lambda_calculus
Steven A. Lowe
Wow, saya memiliki lebih dari satu suara positif untuk diberikan pertanyaan ini. Saya telah melihat begitu banyak jawaban teknis yang macet dalam terminologi, tetapi yang ini ringkas dan langsung menjelaskan maksudnya.
Matthew Stopa
8
+1 karena tidak menggunakan istilah "menutup" untuk mendefinisikan penutupan seolah-olah itu membuatnya lebih jelas.
Daniel
5
Wilayah di mana beberapa variabel dapat ada (yaitu, cakupan) yang ditentukan oleh struktur kode Anda (yaitu, secara leksikal). Misalnya, di sebagian besar bahasa, fungsi mendefinisikan ruang lingkup leksikal; variabel apa pun yang dideklarasikan di dalam fungsi tidak dapat diakses di luarnya.
Eevee
19

Juga disebut penutupan atau fungsi anonim .. Saya menemukan deskripsi terbaik di sini . Pada dasarnya, blok kode sebaris yang dapat diteruskan sebagai argumen ke suatu fungsi.

Gulzar Nazim
sumber
17

"Lambda" mengacu pada Kalkulus Lambda atau ekspresi lambda tertentu. Kalkulus Lambda pada dasarnya adalah cabang logika dan matematika yang berhubungan dengan fungsi, dan merupakan dasar dari bahasa pemrograman fungsional .

~ William Riley-Land

wprl
sumber
8

Ini hanyalah fungsi anonim yang dideklarasikan secara inline, paling sering ditugaskan ke delegasi ketika Anda tidak ingin menulis fungsi yang lengkap.

Dalam bahasa seperti lisp / scheme, mereka sering diedarkan secara bebas sebagai parameter fungsi, tetapi idiom dalam C # biasanya menemukan lambda digunakan hanya untuk evaluasi lazy fungsi, seperti di linq, atau untuk membuat kode penanganan peristiwa sedikit lebih pendek.

JasonTrue
sumber
5

Sebenarnya tidak ada yang namanya 'lambda' dalam pemrograman. Itu tergantung pada bahasa, dll.

Singkatnya, biasanya bahasa yang 'memiliki lambda' menggunakan istilah untuk fungsi anonim atau, dalam beberapa kasus, closure. Seperti itu, di Ruby:

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

Menanggapi jawaban sebelumnya:
-Hal penting tentang fungsi anonim bukanlah bahwa mereka tidak memerlukan nama.
-Tutup adalah konsep terpisah.
-Artikel wikipedia yang sangat besar tidak membuat ini menjadi lebih jelas.

Inilah jawaban saya dalam 3 bagian:
1. Lambda adalah fungsi yang juga merupakan ekspresi. Ini yang penting.
2. Banyak bahasa yang mengimplementasikan apa yang disebut "lambda" menambahkan beberapa gula sintaksis untuk membuat penulisan fungsi pendek ini lebih mudah dan lebih cepat, tetapi ini tidak diperlukan.
3. Beberapa bahasa mungkin mengharuskan lambda tidak memiliki efek samping . Itu akan menjadi lambda yang lebih murni dalam arti fungsional.

Ketika sebuah fungsi adalah ekspresi, itu adalah "warga negara kelas satu" dalam bahasa tersebut. Saya bisa melakukan semua hal penting dengannya:

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
cmeub
sumber
1

Dipotong dari wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

Dalam bahasa pemrograman seperti Lisp dan Python, lambda adalah operator yang digunakan untuk menunjukkan fungsi atau penutupan anonim, mengikuti penggunaan kalkulus lambda.

Jala
sumber
Saya rasa yang Anda maksud adalah baris ini: Dalam bahasa pemrograman seperti Lisp dan Python, lambda adalah operator yang digunakan untuk menunjukkan fungsi atau penutupan anonim, mengikuti penggunaan kalkulus lambda. Saya sudah memindai artikel tetapi melewatkannya.
Fred