GEORGE (ภาษาโปรแกรม)
GEORGE (General Order Generator) เป็นภาษาโปรแกรมที่คิดค้นโดยCharles Leonard Hamblinในปี 1957 [ 1 ] [ 2 ] [ 3 ] [ 4 ] มันถูกออกแบบโดยใช้สแต็กแบบ push - down pop-up สำหรับการดำเนินการทางคณิตศาสตร์ และใช้สัญกรณ์แบบโปแลนด์ย้อนกลับ [ 5 ] ภาษานี้ประกอบด้วยลูปซับรูทีนเงื่อนไขเวกเตอร์และเมทริกซ์
คำอธิบาย
นิพจน์พีชคณิตถูกเขียนในรูปแบบสัญกรณ์โปแลนด์แบบย้อนกลับ ดังนี้มีการเขียนไว้a b +เช่นนั้น และเช่นเดียวกันสำหรับการดำเนินการทางคณิตศาสตร์อื่นๆ เช่น การลบ การคูณ และการหาร
นิพจน์พีชคณิตเขียนa x dup × × b x × + c +ว่า โดยที่ ' dup' หมายถึง 'ทำซ้ำค่า'
ตามรูปแบบภาษาโปแลนด์แบบย้อนกลับ คำสั่งกำหนดค่าเพื่อประเมินสูตรถูกเขียนไว้ว่าa x dup × × b x × + c + (y).
คอมพิวเตอร์ประเมินนิพจน์ดังนี้: ค่าของa, จากนั้นx, ถูกผลักไปไว้ด้านบนสุดของสแต็กสะสม ; ' dup' ทำให้สำเนาของค่าสูงสุด ( x) ถูกผลักไปไว้ด้านบนสุดของสแต็กสะสม; การคูณ ( ×) ทำให้ค่าสองค่าบนสุด คือxและxถูกลบออก (popped) และคูณกัน โดยส่งผลลัพธ์กลับไปที่ด้านบนสุดของสแต็กสะสม การคูณครั้งที่สอง ( ×) ทำให้ค่าสองค่าบนสุดในสแต็ก (คือaและx**2) ถูกลบออกและคูณกัน และผลลัพธ์ ( a×x**2) ถูกผลักไปไว้ด้านบนสุดของสแต็กสะสม และทำเช่นนี้กับส่วนประกอบที่เหลือของนิพจน์ การดำเนินการสุดท้าย คือ ( y) ส่งคืนค่าของนิพจน์ไปยังหน่วยเก็บข้อมูลโดยไม่เปลี่ยนแปลงสถานะของสแต็กสะสม
หากสมมติว่าค่าบนสุดของสแต็กสะสมไม่จำเป็นต้องใช้ทันที ค่าดังกล่าวจะถูกลบออก (ล้าง) โดยใช้ตัวดำเนินการ ( ;)
โปรแกรมต่อไปนี้จะอ่านค่าแปดค่าและคำนวณผลรวมของค่าเหล่านั้น:
0, 1, 8 รีพ (จ) อาร์ + ] (ป)
- บรรทัดแรกเป็นการเริ่มต้นผลรวมโดยการผลักค่าศูนย์เข้าไปที่ด้านบนสุดของสแต็กตัวสะสม
- บรรทัดที่สองเป็นการแนะนำลูป โดยอ่านว่า "for 1 to 8 repeat for j" และปิดท้ายด้วยวงเล็บเหลี่ยม
- ในบรรทัดที่สาม ตัวอักษร R จะทำให้มีการอ่านตัวเลขหนึ่งตัวและผลักเข้าไปที่ด้านบนสุดของสแต็กสะสม และเครื่องหมายบวก (+) จะทำให้ค่าดังกล่าวถูกบวกเข้ากับผลรวม (บางส่วน) ทำให้เหลือเพียงผลรวมบางส่วนอยู่ที่ด้านบนสุดของสแต็กสะสม
- หลังจากลูปสิ้นสุดลง (P) จะทำให้ผลรวมสุดท้ายถูกตอกลงบนบัตร
การจัดการเวกเตอร์และเมทริกซ์ต้องใช้สัญกรณ์ตัวห้อย ในภาษา GEORGE ตัวห้อยจะอยู่หน้าชื่อเวกเตอร์หรือเมทริกซ์ ดังนั้น A(j) จึงเขียนว่าj | Aโปรแกรมต่อไปนี้อ่านเวกเตอร์aที่มีค่า 10 ค่า จากนั้นคำนวณกำลังสองของค่าเหล่านั้น และสุดท้ายพิมพ์ค่าเหล่านั้นออกมา
1, 10 R1 (ก) 1, 10 รีพ (จ) j | a dup * j | (a) ; ] 1, 10 P1 (ก)
- ในโปรแกรม บรรทัดแรกเป็นเวกเตอร์อ่านค่าที่อ่านค่าทั้งสิบค่าลงใน a(1) ถึง a(10)
- บรรทัดที่สองเป็นการสร้างลูปเพื่อวนซ้ำค่า j ทั้งสิบค่า
- บรรทัดที่สามดึงค่า a(j) มา ทำซ้ำค่าดังกล่าว คูณค่าทั้งสองนั้นเพื่อให้ได้ค่ากำลังสอง แล้วจึงเก็บค่ากำลังสองนั้นไว้ใน a(j) โปรดสังเกตเครื่องหมายเซมิโคลอน (;) ซึ่งจะล้าง (หรือยกเลิก) ค่าแรกสุดในสแต็กสะสม หากไม่ทำเช่นนี้ ตัวสะสมจะค่อยๆ เต็มไปด้วยค่ากำลังสองของค่าต่างๆ
- บรรทัดสุดท้ายคือคำสั่งเวกเตอร์ (เช่น การพิมพ์) เพื่อเขียนสี่เหลี่ยมจัตุรัสทั้งสิบช่องออกมา
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | ||
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | / | 0 | 16 | เอ | q | (ก) | (q) | บันทึก | อาร์ | |
| 1 | , | // | 1 | 17 | ข | ร | (ข) | (ร) | เอ็กซ์ | (ป) |
| 2 | ; | ~ | 2 | 18 | ซี | ส | (ค) | (s) | พลัง | |
| 3 | * | & | 3 | 19 | ง | ที | (ง) | (ต) | เรม | |
| 4 | ∨ | 4 | 20 | อี | คุณ | (e) | (u) | รากที่สอง | ||
| 5 | + | ] | 5 | 21 | เอฟ | วี | (ฉ) | (v) | บาป | |
| 6 | - | ↓ | 6 | 22 | จี | ว | (ก) | (ว) | คอส | |
| 7 | × | ↑ | 7 | 23 | ชม. | x | (ชม) | (x) | ||
| 8 | ÷ | ตัวแทน | 8 | 24 | ฉัน | y | (ฉัน) | (y) | อาร์1 | |
| 9 | เชิงลบ | ฉัน | 9 | 25 | เจ | z | (จ) | (ซ) | พี1 | |
| 10 | ม็อด | 10 | 26 | เค | α | (ก) | (α) | อาร์11 | ||
| 11 | สูงสุด | 11 | 27 | ล | เบต้า | (ล) | (เบตา) | พี11 | ||
| 12 | ซ้ำ | 12 | 28 | ม | γ | (ม) | (γ) | |||
| 13 | รีฟ | 13 | 29 | n | λ | (น) | (λ) | |||
| 14 | = | 14 | 30 | Θ | μ | (Θ) | (μ) | |||
| 15 | > | 15 | 31 | พี | ω | (ป) | (ω) |
ตารางการเข้ารหัส GEORGE ด้านบนช่วยในการถอดโปรแกรมลงบนบัตรเจาะรู
การดำเนินการแบบมีเงื่อนไขถูกเขียนในรูปแบบของการกระโดด ดังนี้: ถ้า a > 0 ให้ไปที่ 5 (ซึ่งจะย้ายไปยังป้ายกำกับ 5 ถ้า a มากกว่าศูนย์) จะเขียนได้ดังนี้
0 a > 5 ↑
ป้ายกำกับ 5 ระบุโดยการใส่ *5 ไว้ที่อื่นในโปรแกรม การโอนเงินแบบไม่มีเงื่อนไขเขียนว่า 5↑
การเรียกใช้ซับรูทีนทำได้โดยใช้ลูกศรลง เช่น หากต้องการเรียกใช้ซับรูทีนหมายเลข 17 ให้เขียน 17↓ โดยที่หมายเลข 17 นั้นเข้ารหัสโดยใช้คอลัมน์ที่ 3 ของตารางด้านบน
บันทึกทางประวัติศาสตร์
ในเวอร์ชันแรกที่ใช้งานได้ในเดือนพฤษภาคม 1957 บนเครื่องEnglish Electric DEUCEค่าทั้งหมดจะถูกจัดเก็บในรูปแบบเลขฐานสองแบบคงที่ในคำ 32 บิต โดยมีตำแหน่งเลขฐานสอง 16 ตำแหน่ง
ในเวอร์ชันที่สองซึ่งเปิดตัวในปี 1958 ค่าต่างๆ จะถูกจัดเก็บในรูปแบบเลขทศนิยม โดยมีหนึ่งค่าต่อหนึ่งคำ: 22 บิตสำหรับแมนทิสซาและ 10 บิตสำหรับเลขชี้กำลัง
จำเป็นต้องมีตารางรหัสเนื่องจากอุปกรณ์การพิมพ์ในสมัยนั้นพิมพ์ได้เพียง 26 ตัวอักษร จุดทศนิยม เครื่องหมายบวก เครื่องหมายลบ และเครื่องหมายทับเท่านั้น