ในรหัสเทียมอะไร: = หมายถึงอะไร


25

ส่วนที่ชื่อว่าAlgorithmic Implementationมีรหัสต่อไปนี้:

// Return RC low-pass filter output samples, given input samples,
 // time interval dt, and time constant RC
 function lowpass(real[0..n] x, real dt, real RC)
   var real[0..n] y
   var real α := dt / (RC + dt)
   y[0] := x[0]
   for i from 1 to n
       y[i] := α * x[i] + (1-α) * y[i-1]
   return y

อะไร: = หมายถึงอะไร


2
ฉันได้เรียนรู้ว่ามันมาจากปรัชญาและสัญกรณ์ลอจิกซึ่งกำหนดเป็น ": = กำหนดให้เป็น" ดังนั้น x: = 1 คือ x ถูกกำหนดให้เป็น 1
Patrick Hughes

3
เมื่อฉันเรียนวิชาวิทยาการคอมพิวเตอร์ AP ในปี 1990 เราใช้ Pascal เป็นภาษาการเรียนรู้ ฉันมักออกเสียง:=ว่า "เท่ากับ" ฉันชอบสิ่งนี้มากกว่า=และ==เนื่องจาก "=" ในภาษาธรรมชาติเป็นตัวดำเนินการเปรียบเทียบ (หรืออย่างน้อยก็ข้อความจริง)
TecBrat

คำตอบ:


59

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

จากบทความ:

input: an array a of length n with array elements numbered 0 to n − 1

inc ← round(n/2)
while inc > 0 do:
    for i = inc .. n − 1 do:
        temp ← a[i]
        j ← i
        while j ≥ inc and a[j − inc] > temp do:
            a[j] ← a[j − inc]
            j ← j − inc
        a[j] ← temp
    inc ← round(inc / 2.2)

ภาษาสมัยใหม่บางภาษาใช้ลูกศรสำหรับการมอบหมาย สะดุดตาที่สุดRซึ่งใช้สำหรับการมอบหมายทั่วโลกในขณะที่ใช้เท่ากับ (=) สำหรับการมอบหมายในท้องถิ่น

จากแนวคิดการเขียนโปรแกรมภาษาของ Sebesta และบันทึกย่อในชั้นเรียนของดร. เคเอ็นคิงเราได้เรียนรู้ว่ามาตรฐานการมอบหมายกลับไปไกลกว่า C หรือ Pascal มาก ปรากฏว่าในปี 1958 เมื่อ Algol ได้รับการออกแบบก็ตัดสินใจที่จะใช้: = สำหรับการมอบหมาย ผู้รับมอบหมายประกอบด้วยตัวแทนอเมริกันและยุโรป ชาวเยอรมันบางคนในคณะกรรมการมีความคุ้นเคยกับภาษา Plankalkul ของ Konrad Zuse (ซึ่งถูกร่างขึ้นในช่วงสงครามโลกครั้งที่สอง แต่ไม่ได้เผยแพร่จนกระทั่งปี 1972 และไม่ได้นำมาใช้จนถึงปี 2005) และต้องการให้มอบหมายให้ทำตามวิธีการมอบหมายของภาษานั้นb+c => aโดยที่ b + c ถูกกำหนดให้กับ a คณะกรรมการเปลี่ยนสิ่งนี้เป็น =: โดยอ้างว่าวิธีการเข้าใช้โปรแกรมในเวลาที่เรียกว่าการกดปุ่มไม่ได้ใช้ ">" ดังนั้นพวกเขาจึงยอมจำนนต่อลำไส้ใหญ่เท่ากับ อย่างไรก็ตามชาวอเมริกันที่คุ้นเคยกับ FORTRAN (มันไม่ได้เป็นตัวพิมพ์เล็กจนถึงปี 1990) ต้องการให้งานได้รับมอบหมายทางด้านซ้ายเนื่องจากเป็นวิธีที่ FORTRAN ทำ

ดังนั้นพวกเขาจึงพยายามทำให้มันเปลี่ยนเป็น: = แทนและให้งานมอบหมายไปทางซ้ายมากกว่าทางด้านขวาในรูปแบบของ FORTRAN (เป็นภาษาที่ใช้งานที่รู้จัก) มากกว่า Plankalkul (เป็นภาษาที่ไม่รู้จักนอกประเทศเยอรมนีและไม่นำมาใช้) . Algol 60 มีอิทธิพลอย่างมากต่อภาษาบังคับที่สำคัญต่อมาทั้งหมดรวมถึง Pascal และ C ดังนั้น Pascal จึงเก็บไวยากรณ์ของ ALGOL ไว้สำหรับการมอบหมาย

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

การเปิดตัวIBM 029 Keypunchในปี 1964 ได้รับอนุญาตสำหรับ> และ <ตัวอักษรดังนั้นจึงแสดงการรวมใน C ในกลุ่มอื่น ๆ


1
นอกเหนือจากเซมิโคลอนที่หายไปและฟังก์ชันส่งคืนพิมพ์รหัสนี้แล้วดูเหมือนว่า PASCAL, MODULA หรือภาษา Wirth อื่น ๆ
Ingo

7
รหัสหลอกส่วนใหญ่ใช้:=สำหรับการมอบหมาย คนที่มีพื้นฐานทางคณิตศาสตร์ก็จะให้ความช่วยเหลือเช่นนี้
oenone

3
เพียงแค่เพิ่มว่ามันยังคงใช้กันอย่างแพร่หลายใน PL / SQL
Jalayn

1
ไม่ทราบว่าทำไม แต่ลูกศรซ้ายตามที่ได้รับมอบหมายเพียงทำให้ฉันบ้า 9
shabunc

2
Pascal (และส่วนที่เหลือของ "ภาษา Wirth") ได้มาจาก ALGOL ซึ่งได้มาจากสัญกรณ์คณิตศาสตร์
Mason Wheeler

18

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

เท่าที่เป็นจริงPseudocode ที่เกี่ยวข้องคุณสามารถใช้ "=", "==", "เท่ากับ", "ได้รับมอบหมายให้", ": =", "มี", "ได้รับ", "รับ" หรืออะไรก็ตามลอยเรือของคุณ ตราบใดที่คุณมีความสอดคล้องกันและการใช้งานและบริบทอยู่ในรหัสปลอมของคุณจะชัดเจน


6

ฉันเดาว่ามันเป็นการมอบหมาย (ฉันคิดว่ามันเป็นโอเปอเรเตอร์การมอบหมายใน Delphi) ดังนั้นใน y [0]: = x [0] คุณกำลังกำหนดค่าของ x [0] ถึง y [0]

แต่ AFAIK ไม่มีสิ่งใดที่เป็นรหัสหลอกมาตรฐานดังนั้นในทางทฤษฎีแล้วมันอาจเป็นอะไรก็ได้: =)


8
@loudsight: เพราะ= อยู่แล้วมีความแตกต่างกันมากความหมาย: ความเท่าเทียมกัน การใช้โอเปอเรเตอร์ที่มีความหมายที่เข้าใจดีสำหรับบางสิ่งที่แตกต่างกันจะเป็นสิ่งที่โง่มาก
Jörg W Mittag

1
@ Jörg W Mittag ฉันคิดว่ามันขึ้นอยู่กับว่าผู้ชมเป้าหมายคือใคร ฉันนึกภาพสำหรับนักพัฒนาส่วนใหญ่ (Java, C / C ++, ฯลฯ .. ) = หมายถึงการมอบหมาย

5
@loudsight: นักพัฒนาส่วนใหญ่ไม่ได้เกิดมาแม้แต่ตอนที่เขียนโค้ดหลอกครั้งแรก กลับมาแล้วก็คือคนส่วนใหญ่จากพื้นหลังทางคณิตศาสตร์ที่แข็งแกร่งที่เขียนลงขั้นตอนวิธีการซึ่งทำให้:=เป็นทางเลือกธรรมชาติเพราะในทางคณิตศาสตร์สัญกรณ์x := vหมายถึง "ให้xเป็นv" เมื่อเทียบกับx = vซึ่งหมายถึง " xเท่ากับv" และดังนั้นจึงทำให้เกิดความสับสน
back2dos

8
หากมีรหัสหลอกมาตรฐานเราจะเห็นรหัสเทียมหลอกจำนวนมาก

2
@ back2dos ฯลฯ แม้วันนี้การใช้=งานที่มอบหมายจะทำให้เกิดความสับสน ฉันยังจำได้นานเมื่อฉันเรียนรู้ที่จะเขียนโปรแกรมครั้งแรกมันทำให้สับสนได้x = x + 1อย่างไร เมื่อคุณเรียนคณิตศาสตร์ขั้นพื้นฐานขั้นสูงแล้วx = x + 1ดูเหมือนว่าจะเป็นไปไม่ได้ที่จะพูดพล่อยๆไม่ได้ ต่อไปฉันอ่านหนังสือวิทยาศาสตร์คอมพิวเตอร์ที่ยอดเยี่ยมสำหรับผู้อ่านทั่วไป ( ฉันคิดว่ามันเป็นแบบนี้ ) ซึ่งใช้<-สำหรับการมอบหมาย x <- x + 1ง่ายต่อการเข้าใจ
MarkJ

-1

มันมักจะหมายถึงสิ่งเดียวกันในคณิตศาสตร์: การมอบหมาย


6
ไม่มีสิ่งเช่น "การมอบหมาย" ในวิชาคณิตศาสตร์สำหรับความรู้ของฉัน
Ingo

7
ในคณิตศาสตร์:=มักจะหมายถึง "หมายถึง" หรือ "มีความหมายเท่ากับ"
oenone

3
@Ingo: "เขียนรูปแบบบิตสำหรับค่าของนิพจน์ x ไปยังตำแหน่งหน่วยความจำที่ชื่อ y" จะแตกต่างจากการมอบหมายในภาษาการเขียนโปรแกรมอย่างสิ้นเชิง สิ่งที่คุณอธิบายคือการใช้งานที่เป็นไปได้ของการดำเนินการคำสั่งที่ได้รับมอบหมาย
back2dos

3
@Ingo: ฉันไม่เห็นด้วย ในกรณีของคุณสมบัติการมอบหมายให้โทรและความจริงที่ว่าส่วนใหญ่ของรหัสถูกดำเนินการในเครื่องเสมือนหรือโดยล่ามแทนที่จะตรงกับ "สถาปัตยกรรมปัจจุบัน" โดยตรงแม้กระทั่งการมอบหมายให้กับตัวแปร ไม่ต้องการผลลัพธ์ในการดำเนินการดังกล่าวเนื่องจากการปรับให้เหมาะสม มีข้อยกเว้นเล็กน้อยควรใช้ภาษาตามข้อกำหนดของภาษานั้น ๆ และไม่ยึดตามสมมติฐานบางประการเกี่ยวกับการนำไปใช้ ทั้งหมดที่คุณสามารถพูดเกี่ยวกับการกำหนดให้กับตัวแปรคือตัวแปรที่ชื่อ y นั้นจะสะท้อนกลับไปเป็นค่าของนิพจน์ x
back2dos

3
@Ingo: ไม่มันไม่ใช่เรื่องไร้สาระ การคอมไพล์x := 1; y := 2; if (x = 1) y := 3ราวกับว่าเพิ่งถูกปรับy := 3ให้เหมาะสม (สมมติว่า x ไม่ได้ใช้ในภายหลัง) ของ 3 การมอบหมาย 2 จะดำเนินการโดยวิธีการวิเคราะห์แบบคงที่ "คำจำกัดความ" ของงานที่มอบหมายเป็นข้อความแบบครอบคลุมซึ่งไม่ได้ถือโดยไม่มีข้อสันนิษฐานมากมายคำจำกัดความของคำนี้ไม่ควรขึ้นอยู่กับ
back2dos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.