Atur mesin WABAC , Sherman. Pertanyaan ini adalah tentang BASIC secara umum, dan Microsoft BASIC-80 pada khususnya. Dasar sekolah tua. Dengan nomor baris.
Bagaimana (atau, lebih tepatnya,) penafsir BASIC sekolah tua menangani UNTUK ... BERIKUTNYA loop ketika tubuh loop tidak dieksekusi, dan pernyataan NEXT muncul rusak?
Pernyataan NEXT yang rusak dari waktu sebelumnya:
Berikut ini subrutin dari game Awari dari "101 Basic Computer Games" karya 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
dan ini dia dengan semuanya kecuali kontrol aliran disunting:
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
Apakah itu membawa kembali kenangan yang tidak begitu disukai? Bisakah Anda mendengar Dijkstra berguling di kuburnya?
Inilah bagian yang menarik dari apa yang terjadi dalam fragmen ini:
- FOR loop kedua, karena menggunakan variabel loop yang sama, menggantikan loop FOR pertama
- Dua loop FOR berbagi pernyataan BERIKUTNYA yang sama
- Pernyataan NEXT UNTUK loop kedua datang sebelum, dalam urutan sumber, tetapi setelah itu, dalam urutan eksekusi
Jadi, Anda mungkin mengira bahwa penerjemah, setelah memulai loop UNTUK, menjalankan pernyataan sampai terjadi di loop NEXT. Urutan pernyataan dalam sumber tidak masalah dalam kasus ini. Tapi mari kita lihat apa yang dikatakan manual dasar80 tentang loop FOR:
Manual dasar-80 mengatakan "moo ..."
Tubuh loop dilewati jika nilai awal loop kali tanda langkah melebihi nilai akhir kali tanda langkah.
Jadi, badan loop dapat dilewati seluruhnya.
Kami memiliki bukti, dalam bentuk program yang diterbitkan, bahwa setidaknya beberapa versi BASIC secara dinamis menemukan pernyataan NEXT mereka. Ini cukup mudah dilakukan ketika loop body dieksekusi. Namun, dalam kasus di mana badan pernyataan FOR harus dilewati, sebagaimana BASIC-80 mengizinkan, bagaimana BASIC menemukan pernyataan NEXT, mengingat bahwa itu mungkin sebelum pernyataan FOR dalam urutan sumber?
- Apakah versi BASIC yang digunakan dalam "101 Basic Computer Games" selalu menjalankan loop body setidaknya sekali?
- Apakah BASIC-80 memerlukan pernyataan NEXT UNTUK loop berikutnya terjadi setelah pernyataan FOR, dalam urutan sumber?
PS: Ya, saya sedang menulis penerjemah BASIC untuk sekolah dasar BASIC. Itu penyakit.
NEXT
pernyataan mulai dari $ DCF9.