แลมด้าคืออะไร?


93

ใครช่วยให้คำอธิบายที่ดีว่า Lambda คืออะไร? เรามีแท็กสำหรับพวกเขาและพวกเขาอยู่ในความลับของคำถาม C # แต่ฉันยังไม่พบคำจำกัดความและคำอธิบายที่ดีในตอนแรก



2
เป็นไปได้ที่ซ้ำกันของแลมด้า (ฟังก์ชัน) คืออะไร?
nawfal

การแสดงออก Amda อธิบายที่นี่ สวยงาม
Jameer Mulani

คำตอบ:


135

ฟังก์ชั่นปิดแลมบ์ดาสและไม่ระบุตัวตนไม่จำเป็นต้องเหมือนกัน

ฟังก์ชันนิรนามคือฟังก์ชันใด ๆ ที่ไม่มี (หรืออย่างน้อยก็ต้องมี) ชื่อของตัวเอง

การปิดเป็นฟังก์ชันที่สามารถเข้าถึงตัวแปรที่อยู่ในขอบเขตคำศัพท์เมื่อมีการประกาศแม้ว่าจะหลุดออกจากขอบเขตแล้วก็ตาม ฟังก์ชันที่ไม่ระบุตัวตนไม่จำเป็นต้องปิด แต่เป็นฟังก์ชันส่วนใหญ่และมีประโยชน์น้อยกว่าเมื่อไม่ได้ใช้งาน

แลมด้าคือ .. ยังไม่ได้กำหนดไว้ดีเท่ากับวิทยาศาสตร์คอมพิวเตอร์ หลายภาษาไม่ได้ใช้คำนี้ด้วยซ้ำ แต่พวกเขาจะเรียกมันว่าการปิดหรือฟังก์ชัน anon หรือคิดค้นคำศัพท์ของตนเอง ใน LISP แลมด้าเป็นเพียงฟังก์ชันที่ไม่ระบุตัวตน ใน Python แลมบ์ดาเป็นฟังก์ชันที่ไม่ระบุชื่อที่ จำกัด ไว้เฉพาะนิพจน์เดียว มีอะไรเพิ่มเติมและคุณต้องมีฟังก์ชันที่มีชื่อ Lambdas ปิดในทั้งสองภาษา


คำนี้อาจมีจุดมุ่งหมายเพื่อบ่งบอกถึงแคลคูลัสแลมบ์ดาen.wikipedia.org/wiki/Lambda_calculus
Steven A. Lowe

ว้าวฉันมีมากกว่าหนึ่งโหวตที่จะให้คำถามนี้ ฉันเคยเห็นคำตอบทางเทคนิคมากมายที่จมอยู่กับคำศัพท์ แต่คำตอบนี้กระชับและตรงประเด็นทันที
Matthew Stopa

8
+1 สำหรับการไม่ใช้คำว่า "ปิดทับ" เพื่อกำหนดการปิดราวกับว่ามันทำให้ชัดเจนขึ้น
Daniel

5
พื้นที่ที่มีตัวแปรบางตัว (เช่นขอบเขต) ที่กำหนดโดยโครงสร้างของโค้ดของคุณ (กล่าวคือเป็นศัพท์) ตัวอย่างเช่นในภาษาส่วนใหญ่ฟังก์ชันจะกำหนดขอบเขตคำศัพท์ ตัวแปรใด ๆ ที่ประกาศภายในฟังก์ชันจะไม่สามารถเข้าถึงได้จากภายนอก
Eevee

19

นอกจากนี้ยังเรียกว่าปิดหรือฟังก์ชั่นที่ไม่ระบุชื่อ .. ผมพบว่าคำอธิบายที่ดีที่สุดที่นี่ โดยทั่วไปบล็อกอินไลน์ของโค้ดที่สามารถส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชันได้


17

"แลมด้า" หมายถึงแคลคูลัสแลมบ์ดาหรือนิพจน์แลมด้าเฉพาะ แลมบ์ดาแคลคูลัสเป็นพื้นสาขาของตรรกะและคณิตศาสตร์ที่เกี่ยวข้องกับฟังก์ชั่นและเป็นพื้นฐานของโปรแกรมปฏิบัติการภาษา

~ วิลเลียมไรลีย์ - ที่ดิน


8

เป็นเพียงฟังก์ชันที่ไม่ระบุตัวตนที่ประกาศแบบอินไลน์โดยทั่วไปจะกำหนดให้กับผู้รับมอบสิทธิ์เมื่อคุณไม่ต้องการเขียนฟังก์ชันที่สมบูรณ์

ในภาษาเช่นเสียงกระเพื่อม / แบบแผนมักจะส่งผ่านไปอย่างเสรีเป็นพารามิเตอร์ของฟังก์ชัน แต่โดยทั่วไปแล้วสำนวนใน C # จะพบว่า lambdas ใช้สำหรับการประเมินฟังก์ชันแบบขี้เกียจเท่านั้นเช่นเดียวกับใน linq หรือในการทำให้โค้ดการจัดการเหตุการณ์ค่อนข้างเร็วขึ้น


5

ไม่มีสิ่งที่เรียกว่า 'แลมด้า' ในการเขียนโปรแกรม ขึ้นอยู่กับภาษา ฯลฯ

ในระยะสั้นโดยปกติแล้วภาษาที่ "มี lambdas" จะใช้คำนี้สำหรับฟังก์ชันที่ไม่ระบุตัวตนหรือในบางกรณีก็คือการปิด เช่นนั้นใน Ruby:

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

4

เพื่อตอบสนองต่อคำตอบก่อนหน้านี้:
- สิ่งสำคัญเกี่ยวกับฟังก์ชันที่ไม่ระบุชื่อไม่ใช่ว่าพวกเขาไม่ต้องการชื่อ
-Closures เป็นแนวคิดที่แยกจากกัน
- บทความวิกิพีเดียขนาดมหึมาไม่ได้ทำให้สิ่งนี้ชัดเจนขึ้น

นี่คือคำตอบของฉันใน 3 ส่วน:
1. แลมด้าคือฟังก์ชันที่เป็นนิพจน์ด้วย นี่คือสิ่งสำคัญ
2. หลายภาษาที่ใช้สิ่งที่เรียกว่า "lambdas" จะเพิ่มน้ำตาลวากยสัมพันธ์เพื่อให้การเขียนฟังก์ชันสั้น ๆ เหล่านี้ง่ายขึ้นและเร็วขึ้น แต่ไม่จำเป็นต้องใช้
3. บางภาษาอาจจำเป็นต้องให้แลมบ์ดามีไม่มีผลข้างเคียง นั่นจะเป็นแลมด้าที่บริสุทธิ์กว่าในแง่การทำงาน

เมื่อฟังก์ชันเป็นนิพจน์แสดงว่าเป็น "พลเมืองชั้นหนึ่ง" ภายในภาษา ฉันสามารถทำสิ่งที่สำคัญทั้งหมดได้:

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: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

ในภาษาการเขียนโปรแกรมเช่น Lisp และ Python แลมบ์ดาเป็นตัวดำเนินการที่ใช้เพื่อแสดงถึงฟังก์ชันที่ไม่ระบุตัวตนหรือการปิดตามการใช้แคลคูลัสแลมบ์ดา


ฉันเดาว่าคุณหมายถึงบรรทัดนี้: ในภาษาโปรแกรมเช่น Lisp และ Python แลมบ์ดาเป็นตัวดำเนินการที่ใช้เพื่อแสดงถึงฟังก์ชันที่ไม่ระบุตัวตนหรือการปิดตามการใช้แคลคูลัสแลมบ์ดา ฉันสแกนบทความไปแล้ว แต่พลาดไป
Fred
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.