ตั้งค่าเครื่อง WABAC , Sherman คำถามนี้เกี่ยวกับ BASIC โดยทั่วไปและโดยเฉพาะของ Microsoft BASIC-80 โรงเรียนเก่าขั้นพื้นฐาน ด้วยหมายเลขบรรทัด
ล่ามขั้นพื้นฐานแบบเก่า (หรือมากกว่านั้น) มีวิธีจัดการอย่างไร ... NEXT ลูปเมื่อตัวลูปไม่ได้ถูกดำเนินการและคำสั่ง NEXT นั้นไม่เป็นระเบียบ?
คำสั่ง NEXT ที่เลิกใช้แล้วจากเวลาก่อน:
นี่คือรูทีนย่อยจากเกมAwariจาก"101 Basic Computer Games"ของDavid H. Ahl :
200 K=M:GOSUB 600
205 E=0:IF K>6 THEN K=K-7
210 C=C+1:IF C<9 THEN F(N)=F(N)*6+K
215 FOR I=0 TO 5:IF B(I)<>0 THEN 230
220 NEXT I
225 RETURN
230 FOR I=7 TO 12:IF B(I)<>0 THEN E=1:RETURN
235 GOTO 220
และนี่คือทุกสิ่งยกเว้นการควบคุมการไหล redacted:
200 GOSUB 600
215 FOR I=0 TO 5:IF ... THEN 230
220 NEXT I
225 RETURN
230 FOR I=7 TO 12:IF ... THEN RETURN
235 GOTO 220
นั่นนำความทรงจำที่ไม่ถูกใจกลับมาใช่ไหม? คุณสามารถได้ยินDijkstra กลิ้งอยู่ในหลุมฝังศพของเขา?
นี่คือส่วนที่น่าสนใจของสิ่งที่เกิดขึ้นในส่วนนี้:
- FOR FOR อันที่สองเนื่องจากมันใช้ตัวแปรลูปเดียวกันแทน FOR FOR วงแรก
- FOR ลูปสองวงใช้คำสั่ง NEXT เดียวกัน
- คำสั่ง NEXT วงที่สองของ FOR มาก่อนตามลำดับแหล่งที่มา แต่หลังจากนั้นในลำดับการดำเนินการ
คุณอาจคิดว่าล่ามที่เริ่มต้นวนวน FOR นั้นจะเรียกใช้คำสั่งจนกว่าจะเกิดขึ้นข้ามลูป NEXT คำสั่งของคำสั่งในแหล่งที่มาไม่สำคัญในกรณีนี้ แต่เรามาดูกันว่าคู่มือพื้นฐาน 80 ได้พูดถึงเรื่องลูปสำหรับ:
คู่มือพื้นฐาน -80 บอกว่า "หมู่ ... "
เนื้อความของการวนซ้ำถูกข้ามถ้าค่าเริ่มต้นของการวนซ้ำครั้งที่เครื่องหมายของขั้นตอนเกินกว่าค่าสุดท้ายคูณด้วยเครื่องหมายของขั้นตอน
ดังนั้นตัวลูปสามารถข้ามได้ทั้งหมด
เรามีหลักฐานในรูปแบบของโปรแกรมที่เผยแพร่ว่าอย่างน้อยบางรุ่นของ BASIC กำลังค้นหาคำสั่ง NEXT ของพวกเขาแบบไดนามิก นี่เป็นเรื่องง่ายพอที่จะดำเนินการเมื่อมีการประมวลผลเนื้อหา อย่างไรก็ตามในกรณีที่ควรข้ามเนื้อหาของคำสั่ง FOR เนื่องจาก BASIC-80 อนุญาต BASIC ค้นหาคำสั่ง NEXT ได้อย่างไรเนื่องจากอาจเป็นก่อนคำสั่ง FOR ตามลำดับที่มา?
- รุ่นพื้นฐานของ BASIC ใช้ใน "101 Basic Computer Games" เรียกใช้ลูปร่างกายอย่างน้อยหนึ่งครั้งหรือไม่?
- BASIC-80 ต้องการให้คำสั่ง NEXT ของวงวนเกิดขึ้นหลังจากคำสั่ง FOR ตามลำดับที่มาหรือไม่
PS: ใช่ฉันกำลังเขียนล่ามพื้นฐานสำหรับโรงเรียนเก่าพื้นฐาน มันเป็นอาการป่วย
NEXT
คำสั่งเริ่มต้นที่ $ DCF9