Saya sedikit bingung tentang 'fungsi' dan 'lambda'. Saya telah melihat beberapa contoh yang menunjukkan bahwa kata kunci skema lambda
bekerja sangat mirip dengan kata kunci JavaScript function
, tetapi saya benar-benar tidak tahu bagaimana mereka terkait.
Saya diberitahu bahwa 'fungsi' dan 'metode' dapat digunakan secara bergantian ketika berbicara tentang objek di .net. Saya bertanya-tanya apakah 'lambda' dan 'fungsi' memiliki arti yang sama. Saya bertanya-tanya apakah 'lambda' memiliki makna esoteris, melihat bahwa huruf Yunani lambda (λ) muncul di begitu banyak avatar di situs ini. Untuk membuat hal-hal menjadi lebih membingungkan, dalam .net, bagian fungsional dari C # merujuk pada ekspresi fungsi yang dilewatkan ke fungsi lain sebagai 'ekspresi lambda', sehingga kata tersebut sepertinya benar-benar ada di semua tempat.
Saya juga tidak asing dengan istilah 'lambda calculus'.
Apa perbedaan antara fungsi dan lambda?
sumber
I wonder if 'lambda' has some esoteric meaning, seeing that the Greek letter lambda (λ) appears in so many avatars on this site.
Orang akan berharap itu mengacu pada kalkulus lambda, tapi aku punya perasaan aneh Half Life yang harus disalahkan untuk avatar lambda.Jawaban:
Kata "lambda" atau "ekspresi lambda" paling sering merujuk pada fungsi anonim. Jadi dalam arti itu lambda adalah semacam fungsi, tetapi tidak setiap fungsi adalah lambda (yaitu fungsi yang disebut biasanya tidak disebut sebagai lambda). Bergantung pada bahasanya, fungsi anonim sering diimplementasikan secara berbeda dari fungsi yang disebutkan (terutama dalam bahasa di mana fungsi anonim ditutup dan fungsi yang disebutkan tidak), jadi merujuk pada mereka dengan istilah yang berbeda dapat masuk akal.
Perbedaan antara kata kunci lambda skema dan kata kunci fungsi Javascript adalah bahwa yang kedua dapat digunakan untuk membuat fungsi anonim dan fungsi yang dinamai sementara yang sebelumnya hanya membuat fungsi anonim (dan Anda akan gunakan
define
untuk membuat fungsi bernama).Kalkulus lambda adalah bahasa pemrograman minimal / model matematika perhitungan, yang menggunakan fungsi sebagai satu-satunya "struktur data". Dalam kalkulus lamdba, simbol lambda digunakan untuk membuat fungsi (anonim). Di sinilah penggunaan istilah "lambda" dalam bahasa lain berasal.
sumber
define
(ataulet
salah satu kerabatnya, atau internal yang menentukan) untuk membuat nama - itu saja. Tidak ada yang istimewadefine
sehubungan dengan fungsi.define
memang memiliki bentuk khusus untuk mendefinisikan fungsi (yaitu Anda dapat menulis(define (f x) (foo))
alih-alih(define f (lambda (x) (foo)))
), tetapi poin saya adalah bahwa Anda tidak dapat membuat fungsi bernama menggunakanlambda
sendiri, yaitu Anda tidak dapat menulis sesuatu seperti(lambda f (x) (foo))
mendefinisikan fungsi bernamaf
yang membutuhkan satu argumen seperti yang Anda bisa denganfunction
kata kunci Javascript .define
memiliki itu sebagai gula sintaksis, sehingga tidak sepenting perannya sebagai alat pengikat nama untuk semua nilai. Adapunlambda
tidak membuat nama dengan sendirinya: itu fitur penting, karena memisahkan pemberian nama dari bentuk fungsi ... IMO JS melakukan hal yang benar dalam memungkinkan pemisahan sementara juga menerima nama opsional untuk massa yang akan merasa ngeri pada gagasan fungsi tanpa nama. (Dan untungnya ukuran massa tersebut menurun secara umum ...)Lambda hanyalah fungsi anonim - fungsi tanpa nama.
sumber
lambda
ekspresi dalam Skema sepertifunction
ekspresi tanpa nama - tetapi tidak ada yang menghentikan Anda dari memberi nama pada mereka. Sebagai contohvar f = [function(x){return x;}][0]
. Anda bisa berpendapat bahwa nilai fungsi itu sendiri tidak memiliki nama, tetapi itu akan berlaku untuk semua fungsi ...Dijawab Di Sini: https://stackoverflow.com/questions/16501/what-is-a-lambda-function
Pada dasarnya Lambda adalah fungsi anonim.
sumber
Dalam C # fungsi anonim adalah istilah umum yang mencakup ekspresi lambda dan metode anonim (metode anonim adalah contoh delegasi tanpa deklarasi metode aktual).
Ekspresi Lambda dapat dipecah menjadi ekspresi lambda dan pernyataan lambda
Ekspresi lambda:
Pernyataan lambda mirip dengan ekspresi lambda kecuali pernyataan terlampir dalam kurung:
Ketika kita berbicara tentang ekspresi lambda dalam JavaScript yang pada dasarnya berarti menggunakan fungsi sebagai argumen dalam panggilan ke fungsi lain.
sumber
TL; DR Seperti yang ditunjukkan orang lain: notasi lambda hanyalah cara untuk mendefinisikan fungsi tanpa dipaksa untuk memberi mereka nama.
Versi panjang
Saya ingin menguraikan sedikit tentang topik ini karena saya merasa sangat menarik. Penafian: Saya sudah lama mengikuti kalkulus lambda. Jika seseorang dengan pengetahuan yang lebih baik menemukan kesalahan dalam jawaban saya, jangan ragu untuk membantu saya meningkatkannya.
Mari kita mulai dengan ekspresi, misalnya
1 + 2
danx + 2
. Literal seperti1
dan2
disebut konstanta karena terikat dengan nilai tetap tertentu.Identifier seperti
x
disebut variabel dan untuk mengevaluasinya Anda harus mengikatnya ke beberapa nilai terlebih dahulu. Jadi, pada dasarnya Anda tidak dapat mengevaluasix + 1
selama Anda tidak tahu apax
itu.Notasi lambda menyediakan skema untuk mengikat nilai input spesifik ke variabel. Sebuah ekspresi lambda dapat dibentuk dengan menambahkan
λx .
di depan sebuah ekspresi yang ada, misalnyaλx . x + 1
. Variabelx
dikatakan bebas dix + 1
dan terikat diλx . x + 1
Bagaimana ini membantu dalam mengevaluasi ekspresi? Jika Anda memberi nilai pada ekspresi lambda, seperti itu
maka Anda dapat mengevaluasi seluruh ekspresi dengan mengganti (mengikat) semua kemunculan variabel
x
dengan nilai 2:Jadi, notasi lambda menyediakan mekanisme umum untuk mengikat hal-hal ke variabel yang muncul dalam blok ekspresi / program. Bergantung pada konteksnya, ini menciptakan konsep yang sangat berbeda dalam bahasa pemrograman:
Terlepas dari perbedaan, notasi lambda adalah tentang mendefinisikan parameter formal dan mengikatnya ke parameter aktual.
Langkah selanjutnya, adalah memberi fungsi / prosedur nama. Dalam beberapa bahasa, fungsi adalah nilai seperti yang lain, sehingga Anda dapat memberi nama fungsi sebagai berikut:
Seperti yang ditunjukkan Eli Barzilay, definisi ini hanya mengikat nama
f
pada suatu nilai, yang kebetulan merupakan suatu fungsi. Jadi dalam hal ini, fungsi, angka, string, karakter adalah semua nilai yang dapat diikat ke nama dengan cara yang sama:Dalam bahasa ini Anda juga dapat mengikat fungsi ke nama menggunakan notasi yang lebih akrab (tapi setara):
Beberapa bahasa, misalnya C, hanya mendukung notasi terakhir untuk mendefinisikan (bernama) fungsi.
Penutupan
Beberapa pengamatan terakhir tentang penutupan . Pertimbangkan ungkapannya
x + y
. Ini mengandung dua variabel gratis. Jika Anda mengikatx
menggunakan notasi lambda Anda mendapatkan:Ini bukan (belum) fungsi karena masih berisi variabel gratis
y
. Anda bisa membuat fungsi dengan mengikaty
juga:atau
yang sama dengan
+
fungsinya.Tetapi Anda dapat mengikat, katakanlah,
y
dengan cara lain (*):Hasil penerapan kenaikan fungsi Dengan angka adalah penutupan, yaitu fungsi / prosedur yang badannya berisi variabel bebas (misalnya
y
) yang telah terikat pada nilai dari lingkungan di mana penutupan didefinisikan.Begitu
incrementBy 5
juga fungsi (penutupan) yang menambah angka dengan 5.CATATAN (*)
Saya sedikit curang di sini:
setara dengan
jadi mekanisme pengikatannya sama. Secara intuitif, saya berpikir tentang penutupan sebagai mewakili sebagian dari ekspresi lambda yang lebih kompleks. Ketika representasi ini dibuat, beberapa binding dari ekspresi ibu telah ditetapkan dan penutupan menggunakannya nanti ketika akan dievaluasi / dipanggil.
sumber
"Lambda" dalam pemrograman biasanya berarti "fungsi lambda" (atau juga "ekspresi lambda", "istilah lambda"). Ketika fungsi adalah blok kode bernama yang ditentukan sebelum penggunaannya, "fungsi lambda" adalah blok kode (atau ekspresi) yang didefinisikan sebagai pengganti penggunaan yang dapat digunakan sebagai warga negara kelas satu dalam bahasa pemrograman.
Dalam JavaScript ES6 (2015) ada sintaks pendek untuk mendefinisikan lambdas yang disebut "Fungsi Panah" . Dalam C # sintaks tersebut diperkenalkan di .NET 3.0 (sekitar 2006) .
Dalam matematika gagasan "fungsi" memiliki beberapa makna di mana salah satu artinya adalah tentang notasi fungsi (yaitu cara menuliskannya), kemudian "fungsi lambda" (dalam kalkulus) adalah jenis khusus notasi fungsi. Untuk diskusi lebih lanjut, periksa fungsi lambda dalam bahasa pemrograman .
sumber