แคลคูลัสแลมบ์ดาเกี่ยวข้องอะไรกับการศึกษา?


10

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

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


5
ไม่ใช่ "แค่อีกรูปแบบหนึ่งสำหรับฟังก์ชั่น" แต่ "เป็นสัญกรณ์แรกสำหรับฟังก์ชั่น"
Andrej Bauer

ขอบคุณสำหรับคำแนะนำ @Kaveh ฉันจะเก็บไว้ในใจสำหรับการโพสต์ในอนาคต แต่คำตอบของ mhelvens เป็นเลิศดังนั้นไม่จำเป็นต้องมี crosspost

มันเป็นวัตถุที่กำหนดไว้อย่างเป็นทางการ ฉันไม่เห็นว่าปัญหาที่แท้จริงของคุณคืออะไร
Raphael

ฉันไม่เข้าใจคำศัพท์จริงๆหรือทำไมสิ่งที่ทำเสร็จแล้วพวกเขาทำในการเขียนโปรแกรมการทำงานจนกว่าฉันจะเรียนรู้เกี่ยวกับแลมบ์ดาแคลคูลัส มันทำให้การสร้างซอฟท์แวร์ดูมีความเป็นไปได้น้อย
dansalmo

คำตอบ:


13

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

λ

λ

λλ


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

ครับสิ่งที่ผมเขียนข้างต้นไม่ได้หมายความว่าผมไม่ชอบคำตอบของคุณ :)
Sasho Nikolov

ตกลง ;-) แก้ไขแล้ว.
mhelvens

1
เครื่องทัวริงนั้นมีเหตุผลในการใช้รหัสที่จำเจจึงทำให้การใช้ภาษาของเล่นง่ายขึ้นในขณะที่พิมพ์ภาษาได้ง่ายขึ้น stackoverflow.com/questions/507310/the-while-language เครื่องจักรทัวริงยังคงมีประโยชน์อย่างมากสำหรับความเข้าใจในทฤษฎีความซับซ้อน
ดี้

1

λλ

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

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

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

อีกแง่มุมที่สำคัญคือการวิเคราะห์ซอฟต์แวร์จากมุมมองเชิงตรรกะหรือเชิงคณิตศาสตร์มากกว่ามุมมอง "วิทยาศาสตร์คอมพิวเตอร์"

ในขณะที่คำตอบอื่น ๆ ชี้ให้เห็น Lisp คือทั้งหมดที่เกี่ยวกับการเรียกซ้ำแทนที่จะทำซ้ำและการเรียกซ้ำเป็นหัวใจของ CS

λ

[1] โครงสร้างและการตีความโปรแกรมคอมพิวเตอร์โดย Abelson & Sussman

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