แคลคูลัสกับภาษาการเขียนโปรแกรมต่างกันอย่างไร


13

ฉันคิดว่าฉันค่อนข้างสับสนเกี่ยวกับสิ่งที่เรียกว่าแคลคูลัสและสิ่งที่เรียกว่าภาษาการเขียนโปรแกรม

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

ดูเหมือนจะเป็นการแบ่งที่สมเหตุสมผลสำหรับฉัน แต่นี่เป็นความหมายที่ยอมรับกันโดยทั่วไปหรือไม่ หรืออาจจะผิดก็ได้

เกี่ยวข้องทำไมความหมายของการดำเนินงานแบบ nondeterministic (สมมติว่ามันไหลมารวมกัน)? อะไรคือสิ่งที่ได้รับจากการเปิดตัวเลือกกลยุทธ์?

ฉันขอขอบคุณการชี้แจงเกี่ยวกับสิ่งเหล่านี้ และการอ้างอิงที่เป็นรูปธรรมมากยิ่งขึ้น! ขอบคุณ!


3
มันเป็นคำที่แตกต่างกันสำหรับวิธีต่าง ๆ ในการมองในสิ่งเดียวกัน
Raphael

1
@ ราฟาเอล, มันจะตอบคำถามได้อย่างไร? นี่ไม่ใช่สถานที่ที่จะทำปรัชญา
fade2black

4
บางครั้งจำเป็นต้องมีปรัชญาเล็กน้อยทุกที่
André Souza Lemos

คำตอบ:


10

ความหมายของคำไม่คงที่ แต่ฉันสามารถให้ความหมายแก่คุณได้

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

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

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

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

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

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


ดังนั้นภาษาการเขียนโปรแกรมเป็นแคลคูลัสที่ติดตั้งระบบกลยุทธ์ / การเขียนใหม่ที่เข้ากันได้กับมันหรือไม่?
xavierm02

อาจจะ ขั้นตอนการปฏิบัติงานรักษาความหมายไว้เสมอหรือไม่? นั่นคือถ้าโปรแกรมทำการคำนวณแบบขั้นตอนเดียวกับโปรแกรมเราจำเป็นต้องมีหรือไม่? p ppp=p
Andrej Bauer

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

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

ขอบคุณมาก Andrej สิ่งนี้สมเหตุสมผลสำหรับฉัน ฉันรู้ว่ามันอาจแตกต่างกันไปในแต่ละบุคคล แต่ฉันยอมรับคำตอบนี้เนื่องจากฉันคิดว่ามันเป็นคำตอบที่ดีที่สุด
Guido

2

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


ฉันเชื่อว่าความแตกต่างที่สำคัญคือแคลคูลัสนั้นง่ายต่อการเรียนอย่างเป็นทางการในขณะที่ภาษาการเขียนโปรแกรมนั้นค่อนข้างง่ายต่อการใช้งาน สิ่งนี้นำไปสู่ความแตกต่างดังต่อไปนี้:

แคลคูลัสมักจะมินิมอลในขณะที่ PLs มีความซ้ำซ้อน (สำหรับลูปเมื่อคุณมีในขณะที่ลูปสลับเมื่อคุณมีถ้า, ... ) เพื่อแสดงสิ่งที่คุณต้องการได้ง่ายขึ้น

Calculi มีความหมายที่ระบุอย่างสมบูรณ์ในขณะที่ความหมาย PLs มักจะอธิบายโดยล่าม / คอมไพเลอร์เริ่มต้น


ความหมายของการปฏิบัติการบางอย่างนั้นไม่สามารถกำหนดได้เพราะมันช่วยให้:

  • เพื่อพิสูจน์สิ่งต่าง ๆ เกี่ยวกับ "subsemantics" ทั้งหมด
  • เพื่อให้การนำไปใช้งานสามารถเลือกใช้และเพื่อเร่งความเร็ว
  • เพราะบางครั้งคุณมีการดำเนินการ "radnom ()" และหากคุณไม่สนใจความน่าจะเป็น แต่เป็นไปได้เฉพาะสิ่งที่เป็นไปได้การไม่กำหนดระดับเป็นวิธีที่ดีในการเป็นตัวแทนของมัน

โปรดทราบว่าการโทรตามค่านั้นไม่สามารถกำหนดได้: คุณสามารถเลือกที่จะประเมินฟังก์ชันหรืออาร์กิวเมนต์ก่อน


ไม่ฉันไม่เห็นด้วยกับระดับความเป็นทางการหรือความซับซ้อน
Andrej Bauer

2

"ภาษาการเขียนโปรแกรม" และ "แคลคูลัส" เป็นคำ polysemic นั่นคือมันหมายถึงสิ่งต่าง ๆ ขึ้นอยู่กับบริบท

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

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

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

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