ต้นกำเนิดและความหมายของวลี“ แลมบ์ดาที่สุดคืออะไร”


43

ฉันยุ่งกับภาษาการเขียนโปรแกรมที่ใช้งานได้ไม่กี่ปีที่ผ่านมาและฉันก็พบกับวลีนี้ ตัวอย่างเช่นมันเป็นบทของ "The Little Schemer ซึ่งแน่นอนว่าบล็อกนี้มีมาก่อนชื่อนี้ (ไม่บทไม่ได้ช่วยตอบคำถามของฉัน)

ฉันเข้าใจความหมายของแลมบ์ดาความคิดของฟังก์ชั่นนิรนามนั้นเรียบง่ายและทรงพลัง แต่ฉันไม่เข้าใจว่า "ที่สุด" หมายถึงอะไรในบริบทนี้

สถานที่ที่ฉันได้เห็นวลีนี้:

  1. ชื่อของบทที่ 8 ของ The Little Schemer
  2. บล็อก: http://lambda-the-ultimate.org/
  3. ชุดเอกสาร "แลมบ์ดาสุดยอด X": http://library.readscheme.org/page1.html

ฉันรู้สึกว่าฉันไม่มีข้อมูลอ้างอิงที่นี่ใครช่วยได้บ้าง


1
ดูเหมือนว่าเป็นชื่อของบล็อกยอดนิยม แต่ถ้ามีแหล่งประวัติศาสตร์อื่นฉันสนใจ ...
Klaim

1
คุณสามารถให้การอ้างอิงบางส่วนไปยังสถานที่ที่คุณเห็นวลีนี้ได้หรือไม่? บริบทนั้นจะเป็นประโยชน์อย่างมหาศาลในการค้นหาคำตอบ
Adam Crossland

@Adam - เพิ่มการอ้างอิงบางอย่าง
Eric Wilson

ลิงค์ชุดเอกสารเปลี่ยนเส้นทางไปที่cultureua.comมีคนให้ลิงค์อัพเดทหรือไม่
tejasbubane

คำตอบ:


47

ใช่มันเป็นเพียงวลีที่เกิดขึ้นในชื่อของเอกสารหลายเริ่มต้นจากคู่ในยุค 70 ซึ่งใน Sussman และสตีลแสดงให้เห็นถึงการใช้งานของแคลคูลัสแลมบ์ดาสำหรับการเขียนโปรแกรมโดยใช้วิธีการภาษาเสียงกระเพื่อมที่เรียบง่ายที่มีชื่อว่า " โครงการ " พวกเขาวางแผนสำหรับ วัตถุประสงค์ คุณสามารถค้นหาเอกสารด้วยตนเองที่นี่ ; พวกเขาน่าสนใจและมีความเกี่ยวข้องอย่างน่าประหลาดใจ

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

วลีซ้ำ ๆ จะนำไปสู่รูปแบบที่ชัดเจนโดยทั่วไป "สำหรับ X ทั้งหมดแลมบ์ดาเป็นสุดยอด X" ซึ่งเป็นความรู้สึกที่ฉันได้รับโดยทั่วไป "แลมบ์ดาสุดยอด" เพื่อหมายถึงชื่อบล็อกโดยสังเกตว่า LtU เกี่ยวข้องกับภาษาโปรแกรม การออกแบบและทฤษฎี น่าแปลกที่ LtU น่าจะเป็นหนึ่งในสถานที่ที่ดีที่สุดในการหาคนที่สามารถบอกคุณเกี่ยวกับบางสิ่งที่แลมบ์ดาไม่ใช่การดำเนินการขั้นสุดท้าย :]

โปรดทราบว่า Sussman เป็นหนึ่งในผู้เขียนหนังสือSICPซึ่งเป็นตำราเรียนที่มีอิทธิพลมากซึ่งใช้ภาษา Scheme และใช้เวลาพอสมควรในการนำแนวคิดของแลมบ์ดาเป็นแนวคิด


2
+1 สำหรับการค้นหาเอกสารคลาสสิกเหล่านั้น Guy L. Steele จูเนียร์ก็เขียนหนังสือเกี่ยวกับCommon LISPด้วย LISP และ Scheme ไม่ใช่จุดจบของถนนสำหรับ Guy ผู้ไปช่วยJ , Fortressและภาษาอื่น ๆ ผู้ชายยังมีส่วนร่วมในไฟล์อาชีพและพจนานุกรมของแฮกเกอร์
John Tobler

@ John Tobler: ค่อนข้างเป็นอย่างนั้น! ฉันมุ่งเน้นไปที่ Sussman เพียงเพราะเขาดูเหมือนจะมีส่วนร่วมมากขึ้นกับโครงการซึ่งผูกติดอยู่กับเอกสารแลมบ์ดา ไม่ได้หมายความว่าให้ความประทับใจที่ Steele ไม่ได้ทำอะไรเลยเพราะมันห่างไกลจากความจริง :]
CA McCann

28

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

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

ฉันเข้าใจความหมายของแลมบ์ดาความคิดของฟังก์ชั่นนิรนามนั้นเรียบง่ายและทรงพลัง แต่ฉันไม่เข้าใจว่า "ที่สุด" หมายถึงอะไรในบริบทนี้

ในทางปฏิบัติแล้วการใช้ lambdas เป็นวากยสัมพันธ์เชิงวากยสัมพันธ์ ('macros') ซึ่งไม่ใช่การเรียกตามค่า / การประยุกต์ใช้ แกนหลักของทุกระบบการประมวลผลภาษาโปรแกรม

สำหรับทฤษฎี: มีการเชื่อมโยงที่น่าสนใจกับความขัดแย้งของ Bertrand Russell และสัจพจน์ของความเข้าใจ (และการขยาย) ในทฤษฎีเซตไร้เดียงสา แลมบ์ดาทำหน้าที่อะไรคือสัญกรณ์ set-builder คือการตั้งค่า: แลมบ์ดาเป็นสัญกรณ์ตัวสร้างฟังก์ชั่น มีความแตกต่างที่สำคัญซึ่งมักจะถูกละเว้นระหว่าง (lambda (x) (* xx)) และสิ่งที่ประเมินผล (ฟังก์ชันที่กำลังสอง) ถ้าใครไม่สามารถแยกแยะความแตกต่างระหว่างคนทั้งสองโดยทั่วไปนั่นคือระหว่างสัญลักษณ์และ denotation (ความผิดพลาดที่โบสถ์และ Frege ทั้งคู่ทำ) จากนั้นก็วิ่งฝ่าความขัดแย้ง สำหรับเซตและเฟรจ์มันเป็นตัดผมของเซทท์ของเบอร์ทรานด์รัสเซลที่แสดงข้อผิดพลาด สำหรับฟังก์ชั่นและโบสถ์มันเป็น Oracle Halting ของ Alan Turing

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


แร็กเก็ต (ชื่อเดิม PLT Scheme) ยังคงดำเนินการต่อความคิดที่ว่าภาษาการเขียนโปรแกรมเชิงปฏิบัติสามารถสร้างขึ้นได้จากพื้นดินบน 'just lambda'

เคอร์เนลโดย Shutt ให้เหตุผลว่าแลมบ์ดานั้นไม่ใช่สิ่งที่เป็นนามธรรม เขาให้เหตุผลว่ายังมีแนวคิดหนึ่งที่โบราณกว่า (สำหรับชาวกรีก, dubbed vau) ซึ่งเป็นที่รู้จักกันในชื่อ Sussman ในฐานะ FEXPR

Felleisin และ บริษัท (สำหรับแร็กเก็ต) ได้รับประโยชน์จาก vau ของ Shutt มากโดยใช้แนวคิดของเฟสหรือโลหะซึ่งประมาณหมายถึงการเรียกใช้ซอร์สโค้ดผ่านการแปลหลายขั้นตอน (เช่นเดียวกับการประมวลผลล่วงหน้า C แต่ใช้ภาษาเดียวกันในแต่ละภาษา 'ขั้นตอน' และ 'ขั้นตอน' ไม่ได้แยกตามเวลา) (ดังนั้นพวกเขาให้เหตุผลว่าแลมบ์ดาในระยะที่สูงกว่าประมาณ vau ดีพอ) อันที่จริงพวกเขาอ้างว่าขั้นตอนนั้นดีกว่า FEXPRs อย่างแม่นยำเพราะถูก จำกัด มากขึ้น กล่าวโดยย่อว่า "FEXPR มีพลังมากเกินไป" (ดูการทำงานของ Wand ซึ่ง Shutt แย้งต่อ)

3-Lisp ของ Brian Smith "การสะท้อนขั้นตอนในการเขียนโปรแกรมภาษา" พยายามปฏิรูปทฤษฎีภาษาเหมือน LISP อย่างเข้มงวดตามแนวของสัญลักษณ์ที่เด่นชัด (สัญลักษณ์ / ภาษา / โปรแกรม) จาก denotations (สิ่งที่ / ผู้อ้างอิง / ค่า / ผลลัพธ์ ) http://dspace.mit.edu/handle/1721.1/15961

Mitchell Wand's "The Theory of FEXPRs is Trivial" ส่งเล็บเข้ามาในโลงศพ (ชั่วคราว?) ที่ Kent Pittman กระทำเพื่อ FEXPRs (ซึ่งเหมือน Felleisen โต้แย้งกับ FEXPRs ว่าเป็นการรวบรวมที่ยากเกินไป)

Paul Graham โต้แย้งด้วยความแข็งแกร่งและความยาวใน "On Lisp" ว่าพลังที่แท้จริงคือ lambdas เป็น transformers of syntax (macros) แทนที่จะเป็น transformers of values ​​(ฟังก์ชั่นทางคณิตศาสตร์) การพัฒนาแอพพลิเคชั่นแลมบ์ดาแคลคูลัสของพล็อตคินอาจจะค่อนข้างแตกต่างกันเนื่องจากพล็อตคิน จำกัด แคลคูลัสของคริสตจักรไปยังชุดย่อยที่เรียกตามมูลค่า / การสมัคร แน่นอนว่าการจัดการส่วนการสมัครอย่างมีประสิทธิภาพนั้นเป็นสิ่งสำคัญมากดังนั้นจึงเป็นสิ่งสำคัญในการพัฒนาทฤษฎีเฉพาะด้านการใช้แลมบ์ดานั้น (Plotkin และ Graham ไม่เถียงกัน)

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

Landin "ภาษาการเขียนโปรแกรมถัดไป 700", http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdfเป็นข้อมูลอ้างอิงที่เข้าถึงได้ซึ่งมีส่วนช่วยในการพัฒนาแนวคิดที่แลมบ์ดาเป็นที่สุด


ว้าว. ยืนคำตอบปรบมืออย่างสวยหรู พอยน์เตอร์มากมายที่ต้องติดตาม
hmijail

13

ฉันเดาว่ามันเป็นเพียงการอ้างอิงถึงบางบทความที่เขียนโดย Sussman และ Steele ระหว่างปี 1975 ถึง 1980 เรียกว่า:

  • แลมบ์ดา: ความจำเป็นสูงสุด
  • แลมบ์ดา: สุดยอดปฏิญญา
  • แลมบ์ดา: สุดยอด GOTO
  • LAMBDA: Opcode ขั้นสูงสุด

ดูบทความ Wikipedia

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