Set WABAC makinesi , Sherman. Bu soru genel olarak BASIC ve özellikle Microsoft'un BASIC-80 ile ilgilidir. Eski okul temel. Satır numaraları ile.
Döngü gövdesi yürütülmediğinde ve NEXT ifadesi düzensiz göründüğünde eski okul BASIC tercümanları FOR ... NEXT döngülerini nasıl işler (ya da daha doğrusu)?
Önceki zamanlardan itibaren sıra dışı bir NEXT ifadesi:
İşte oyun bir altprogram var Awari dışı David H. Ehl yönettiği "101 Temel Bilgisayar Oyunları" :
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
ve burada akış kontrolü hariç her şey var:
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
Bu çok hoş olmayan anıları geri getiriyor mu? Mezarında Dijkstra'nın döndüğünü duyabiliyor musun?
İşte bu parçada olanların ilginç kısmı:
- İkinci FOR döngüsü, aynı döngü değişkenini kullandığından, ilk FOR döngüsünün yerini alır
- İki FOR döngüsü aynı NEXT deyimini paylaşır
- İkinci FOR döngüsünün NEXT ifadesi, kaynak sırada, sonra da yürütme sırasında gelir
Öyleyse, bir FOR döngüsünü başlatan yorumlayıcının, SONRAKİ döngüsünde gerçekleşene kadar ifadeleri çalıştırdığını varsayabilirsiniz. Bu durumda kaynaktaki ifadenin sırası önemli değildir. Ancak, basic80 kılavuzunun FOR döngüleri hakkında ne söylediğine bakalım:
Basic-80 kılavuzu "moo ..." diyor
Döngünün başlangıç değeri, adımın işaretinin çarpım sayısının adımın işaretinin son değerini aşması durumunda, döngü gövdesi atlanır.
Böylece, döngü gövdesi tamamen atlanabilir.
Yayınlanmış programlar biçiminde BASIC'in en azından bazı sürümlerinin NEXT ifadelerini dinamik olarak bulduğuna dair kanıtlarımız var. Bu, döngü gövdesi yürütülürken yapılacak kadar kolaydır. Bununla birlikte, FOR ifadesinin gövdesinin atlanması gerektiğinde, BASIC-80'in izin verdiği gibi, BASIC , kaynak ifadesinde FOR ifadesinden önce olabileceği düşünüldüğünde NEXT ifadesini nasıl buldu ?
- "101 Temel Bilgisayar Oyunları" nda kullanılan BASIC sürümü, döngü gövdesini her zaman en az bir kez çalıştırdı mı?
- BASIC-80, FOR ifadesinden sonra kaynak düzeninde bir FOR döngüsünün NEXT ifadesinin olmasını gerektirdi mi?
PS: Evet, eski okul BASIC için BASIC tercüman yazıyorum. Bu bir hastalık.
NEXT
Deyimi uygulayan kod $ DCF9 ile başlar.