ทำไมภาษาการเขียนโปรแกรมเริ่มใช้ = สำหรับการมอบหมาย


13

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


8
อย่าให้ฉันเริ่ม===...
Deer Hunter

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

@DeerHunter ===ไม่เป็นไร
Darth Egregious

1
ฉันมีหญิงสาวคนหนึ่งในโรงเรียนมัธยมคำราม: "จะ x เท่ากับ x ได้อย่างไร?" ในช่วงแนะนำฉันสอน นี่คือความแปลกประหลาดพื้นฐานของคอมพิวเตอร์: ตัวแปรไม่ได้มีอยู่ในธรรมชาติพวกมันไม่เหมือนสิ่งอื่นใดในเอกภพ

1
User251748: กระเป๋าเงินของฉันเป็นตัวแปรโลกแห่งความจริงที่มีเหรียญหลายชุดธนบัตรและเศษกระดาษเป็นครั้งคราว
gnasher729

คำตอบ:


14

ตามวิกิพีเดียการใช้งานที่เท่าเทียมกันสำหรับวันที่ได้รับมอบหมายกลับไปเป็นภาษา Superplan ของ Heinz Rutishauser ซึ่งได้รับการออกแบบมาตั้งแต่ปี 2492 ถึง 2494 และได้รับความนิยมเป็นพิเศษโดย Fortran:

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

—Niklaus Wirth, ความคิดที่ดี, ผ่านกระจกมอง

Konrad Zuse ยังใช้สัญลักษณ์เท่ากับPlankalkulซึ่งเป็นแรงบันดาลใจให้กับ Superplan ของ Rutishauser's แม้ว่าคอมไพเลอร์ไม่เคยคิดมาก่อน ทำไมเขาถึงเลือกเครื่องหมายเท่ากับ? ฉันเดาว่าคุณต้องถามเขา


4
แน่นอนว่าความคิดแย่ลง หลังจากทั้งหมดตำราคณิตศาสตร์ใช้=ทั้งเป็นเพรดิเคตและเพื่อกำหนดตัวแปรเช่นใน“ ให้ x = 4 จากนั้น√ (x - y) เป็นศูนย์ถ้า y = 4” สิ่งนี้ได้ผลเพราะสัญกรณ์คณิตศาสตร์ควรจะเข้าใจอย่างชัดเจนมากกว่าที่จะเป็นจริง ภาษาโปรแกรมที่ใช้งานได้ (เช่นตระกูล ML) ใช้ค่าเริ่มต้นเป็นตัวแปรที่ไม่แน่นอนและสามารถใช้งานต่อเนื่อง=ในบทบาทคู่โดยไม่มีปัญหาใด ๆ หรือมากกว่านั้นอย่างแม่นยำ=ทั้งตัวดำเนินการและส่วนหนึ่งของletไวยากรณ์
amon

2
@ มอน: ฉันไม่เห็นด้วยกับความหมายที่สองในคณิตศาสตร์ "ให้ 4 = x" ใช้ได้เช่นเดียวกับ "ให้ x = 4"
จาก

4
@COMEFROM "ให้ 4 = x" เป็นเรื่องที่ผิดธรรมชาติเหมือนคำสั่ง INTERCAL ที่คุณใช้ชื่อผู้ใช้ของคุณ เมื่อไม่เคยพูดถึง "x" มาก่อน "ปล่อยให้ x = {some}" หรือ "ให้ x เป็น {widget}" จะแนะนำตัวแปรเพิ่มเติมนอกเหนือจากการระบุค่าของมัน นั่นอย่างแม่นยำเพราะอย่างน้อยก็ในแง่ของสัญชาตญาณนี่เป็นสิ่งที่แตกต่างจากเพียงแค่ระบุ "ค่าเท่ากับ ... "

3
@delnan "ให้ x = 4" เป็นเพียงชวเลขสำหรับ "ให้ x ∈ℤและ x = 4" บริบทนำเสนอตัวแปรใหม่และ=จากนั้นเป็นเพียงเพรดิเคตเหมือนกับที่ใช้ในที่อื่น โปรดทราบว่าขึ้นอยู่กับบริบท "ปล่อยให้ x = 4" อาจหมายถึง "ให้ x ∈ℝและ x = 4"
Doval

2
@ RobertHarvey เรากำลังพูดถึงการเขียนเชิงคณิตศาสตร์ไม่ใช่การเขียนโปรแกรม C มาจาก: ฉันยอมรับว่ามันไม่ชัดเจนเหมือนที่ฉันเคยทำมาก่อน แต่เนื่องจากร้อยแก้วเชิงคณิตศาสตร์ขึ้นอยู่กับอนุสัญญาและไม่มีข้อกำหนดที่ทนายจะอนุญาตให้ "อนุญาต 4 = x" ไม่คำสั่งดังกล่าวคือไม่ถูกต้องเช่นเดียวกับ "ให้ x = 4" อย่างน้อยที่สุดก็สร้างความสับสนให้ผู้อ่านและด้วยเหตุนี้ล้มเหลวในวัตถุประสงค์หลักของร้อยแก้ว

7

แต่เมื่อฉันทำคณิตศาสตร์ที่โรงเรียน "ให้ x = 123"

เป็นถ้อยคำทั่วไป Basic รุ่นก่อนหน้ายืนยันกับคำหลัก "ปล่อย" ก่อนหน้าเท่ากัน ดังนั้นโดยทั่วไปแล้วการต้มจะทำให้ "ปล่อย" นั้นเป็นที่เข้าใจกัน

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

มีอุปกรณ์อินพุตสองที่เป็นไปได้

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

Teletypes มีแนวโน้มที่จะใช้ในร้านค้าวิชาการและทหารเจาะบัตรในร้านค้าเชิงพาณิชย์มากขึ้น ดังนั้นภาษาเชิงวิชาการเช่น Pascal จึงรองรับตัวพิมพ์เล็กและสัญลักษณ์ "สมเหตุสมผล" เช่น ": =" สำหรับการมอบหมาย ภาษามุ่งเป้าไปที่ผู้ชมเชิงพาณิชย์มากขึ้นสันนิษฐานว่าบัตรเจาะเป็นรูปแบบหลักของการป้อนข้อมูลดังนั้นกรณีภาษาเฉพาะเช่น FORTRAN และ COBOL ด้วยการสนับสนุนที่ จำกัด สำหรับอักขระ ":;> <" ซึ่งไม่สามารถใช้งานได้ในการกดปุ่มมาตรฐาน

บังเอิญไม่มีความคลุมเครือเกี่ยวกับ "=" ถูกใช้สำหรับการมอบหมายในช่วงต้น ๆ ของ FORTRAN เมื่อทำการเปรียบเทียบโดยใช้ ".LT.", ".LE.", ".EQ.", ".GE." และ ".GT." วากยสัมพันธ์


ฉันคิดว่ามันlet x = 123คล้ายกับassert(x == 123)งานมอบหมายมากกว่า ๆ
AKHolland

1
ป.ล. ถ้าคุณได้รับความคล่องแคล่วแล้วไวยากรณ์ภาษาโคบอล "ย้าย" เป็นคำอธิบายที่ถูกต้องที่สุดในสิ่งที่คอมพิวเตอร์กำลังทำอยู่ แม้ว่า "COPY" จะแม่นยำยิ่งขึ้น
James Anderson

@AKHolland สำหรับค่าขนาดใหญ่ 123

ตั้งแต่ C ++ ผู้ประดิษฐ์ย้ายสร้าง COBOLs "ย้าย" ฟังดูแปลกมาก
gnasher729

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