ฟังก์ชั่นแลมบ์ดานิรนาม


10

ฟังก์ชั่นนิรนาม (แลมบ์ดา) คืออะไร? คำจำกัดความที่เป็นทางการของฟังก์ชั่นนิรนามในภาษาโปรแกรมทำงานคืออะไร?

ในแง่ง่ายของฉันเมื่อฉันเขียนโปรแกรมในโครงการ / เสียงกระเพื่อมฉันจะบอกว่าฟังก์ชั่นที่ไม่ระบุชื่อ (แลมบ์ดา) เป็นฟังก์ชั่นที่ไม่ได้ผูกไว้กับตัวระบุ

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


คำตอบ:


10

ในความคิดของฉันนั่นคือทั้งหมดที่คุณสามารถพูดเกี่ยวกับพวกเขา

แนวคิดก็คือในภาษาที่มีลำดับสูงกว่าฟังก์ชั่นเป็นเพียงคุณค่าอีกประเภทหนึ่ง เช่นเดียวกับที่คุณมี (3 + 4) โดยไม่มีตัวระบุใน C คุณสามารถมี (lambda (x) + (3 x))) โดยไม่มีตัวระบุในแบบแผน

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


11

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

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

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


1

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

ในความเป็นจริงจากแลมบ์ดาแคลคูลัสมุมมองแลมบ์ดานิพจน์เป็นโครงสร้างประโยคที่ใช้ในการสร้างการผูก จำสัญกรณ์ที่ใช้ในแคลคูลัสแลมบ์ดา:

λ.λx.x

xx

ภาษามักจะเสนอวิธีต่างๆเช่นlet(ML เช่นภาษา, แบบแผน) หรือdefine(แบบแผน) เพื่อสร้างการเชื่อมโยงที่ใช้งานได้ที่ระดับบนสุด (หรือภายในโครงสร้างประโยคที่ซับซ้อนกว่าฟังก์ชั่นเช่นโมดูลหรือวัตถุ) แต่เครื่องมือที่จำเป็นสำหรับ การผูกคือแลมบ์ดาที่ระดับต่ำกว่า

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

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

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

คำแนะนำในหัวข้อที่แนะนำ (ไม่ดี) ในคำตอบนี้:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.