แลมบ์ดาแคลคูลัสนอกการเขียนโปรแกรมการทำงาน


21

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

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

คำตอบ:


15

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

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

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


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

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

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

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

โอเคขอบคุณมาก Dave ที่ได้รับการชื่นชมอย่างมาก
จาค็อบ

17

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

ก่อนอื่นเป็นการออกกำลังกายแบบวอร์มอัพสมมติว่ามีคนถามคุณว่าฟังก์ชันกำหนดโดยf ( x ) = x 2 e x + บันทึก( 1 + x 2 )หรือไม่ คุณไม่จำเป็นต้องพิสูจน์ว่าจริง ๆ แล้วคุณแค่สังเกตว่ามันเป็นองค์ประกอบของฟังก์ชั่นที่แตกต่างกันดังนั้นจึงแตกต่างกัน คุณสามารถสรุปได้ง่าย ๆ โดยยึดตามรูปแบบของคำจำกัดความf:RRf(x)=x2ex+log(1+x2)

ตอนนี้เป็นตัวอย่างจริง สมมติว่ามีคนถามคุณว่าฟังก์ชันถูกกำหนดโดย f ( x ) = ( λ f:RR

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
อย่างต่อเนื่อง อีกครั้งที่เราสามารถตอบได้ทันทีว่า "ใช่" เพราะฟังก์ชั่นที่ถูกกำหนดให้ใช้แคลคูลัสและเริ่มต้นจากแผนที่อย่างต่อเนื่องสูงสุด , , บาปฯลฯλmaxsin

λλ


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

โอ้แย่มากฉันจะเขียนคำตอบที่ซับซ้อนเกี่ยวกับเรื่องนั้น
Andrej Bauer

ขอโทษด้วย รู้สึกฟรีเพื่อเพิ่มความคิดเห็นใด ๆ ถ้าคุณรู้สึกว่าการเพิ่มข้อมูลเพิ่มเติมใด ๆ :)
จาค็อบ

2
ฉันคิดว่าคำถามของเดฟก็ใช้ได้ฉันไม่มีอะไรเพิ่ม ถ้าคุณต้องการที่จะเห็นสิ่งที่สิ่งที่น่าตื่นเต้นที่คุณสามารถทำอะไรกับแคลคูลัสบางทีคุณสามารถดูได้ที่ functionals เป็นไปไม่ได้ แต่เป็นคำตอบทั่วไปเดฟดีมาก λ
Andrej Bauer

7

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

แน่นอนว่าเป็นไปได้ที่จะเป็นโปรแกรมเมอร์ที่ดีมากโดยไม่ทราบเกี่ยวกับ -calculus แต่คุณพลาดสิ่งที่สวยงามที่มีประโยชน์อย่างมากλ



2

ฉันได้ยินว่านักภาษาศาสตร์กำลังใช้แคลคูลัสแลมบ์ดาโดยไม่ทราบเพิ่มเติมเกี่ยวกับเรื่องนี้

http://www.sfu.ca/~jeffpell/Ling406/LambdaAbstractionOH.pdf , https://files.nyu.edu/cb125/public/Lambda/


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