Il primo linguaggio di programmazione a cui sono stato esposto è stato Sinclair BASIC . Come molti dialetti BASIC, richiede che tutte le righe del codice sorgente siano numerate .
Di conseguenza, l'uso del GO TOcomando era idiomatico e salta l'esecuzione al numero di riga specificato (nessuna etichetta).
Inoltre esiste un GO SUBcomando correlato che può essere utilizzato come chiamata di funzione rudimentale. Ancora una volta, l'esecuzione passa al numero di riga specificato, ma quando RETURNviene raggiunto un comando, l'esecuzione torna all'istruzione successiva dopo il GO SUB.
Allo stesso modo il RUNcomando riavvierà l'esecuzione del programma sulla riga indicata.
Chiunque abbia trascorso del tempo in un interprete BASIC con numero di riga avrà imparato a utilizzare uno schema di numerazione con spazi vuoti. In questo modo è più semplice inserire nuove righe di codice. Tuttavia, anche in questo caso, potresti ancora ritrovarti a dover inserire nuove righe tra le righe numerate consecutive.
Dato un elenco BASIC con numero di riga come input, emette lo stesso programma ma rinumerato in modo tale che i numeri di riga inizino da 10 e aumentino con incrementi di 10. L'elenco di input può avere GO TOo GO SUBcomandi, quindi anche i numeri associati a questi devono essere regolati.
GO TOe iGO SUBcomandi sono sulle loro stesse linee o alla fine delleIFTHENlinee. È sicuro dire che^(\d+) .*GO (TO|SUB) (\d+)$è sufficiente per abbinare tali linee. Questi comandi tra virgolette devono essere ignorati.RUNi comandi saranno sempre sulla loro linea. In questo caso un numero di riga è facoltativo. Se manca, l'interprete si avvia semplicemente nella parte superiore del programma.Se una
GO TO,GO SUBoRUNriferimenti di comando una linea inesistente, allora sarà invece passare alla riga successiva definita. La tua voce deve occuparsi di questo e assicurarsi che tali riferimenti di riga siano fissi in modo che puntino alla riga corretta. Il comportamento potrebbe essere indefinito se in uno di questi comandi viene indicato un numero di riga dopo la fine del programma.I numeri di riga saranno sempre numeri interi positivi da 1 a 9999 (come da manuale). Ciò significa che i programmi di input non avranno mai più di 999 righe.
Le righe di input saranno sempre numerate in ordine numerico crescente.
Ai fini di questa sfida, gli elenchi di input conterranno solo ASCII stampabili. Non devi preoccuparti del set di caratteri ZX. Detto questo, se la tua voce è effettivamente scritta in ZX BASIC o nel codice assembly / macchina z80 appropriato (e ci sono emulatori là fuori ), puoi scegliere di inserire il tuo input nel set di caratteri ZX .
Non è possibile utilizzare librerie o utilità di rinumerazione appositamente studiate per questo scopo.
Esempio di input:
1 REM "A rearranged guessing game"
2 INPUT A: CLS
3 INPUT "Guess the number ", B
10 IF A=B THEN PRINT "Correct": STOP
100 IF A<B THEN GO SUB 125
120 IF A>B THEN GO SUB 122
121 GO TO 3
125 PRINT "Try again"
126 RETURN
127 REM "An example of GO TO 7 and GO SUB 13 in quotes"
Esempio di output:
10 REM "A rearranged guessing game"
20 INPUT A: CLS
30 INPUT "Guess the number ", B
40 IF A=B THEN PRINT "Correct": STOP
50 IF A<B THEN GO SUB 80
60 IF A>B THEN GO SUB 80
70 GO TO 30
80 PRINT "Try again"
90 RETURN
100 REM "An example of GO TO 7 and GO SUB 13 in quotes"
Volevo collegarmi a un manuale ZX BASIC. Il migliore che ho trovato sembra essere http://www.worldofspectrum.org/ZXBasicManual/index.html, ma questo sembra essere un collegamento non funzionante. La macchina del ritorno ha una copia però .
GOTO 100 + A*10 , e l' Appendice C degli elenchi ZX Spectrum ManualGO TO come accettare un'espressione numerica (nessuna restrizione alle costanti). Ecco una discussione sui meriti calcolati GOTOsu ZX80 e ZX81. A proposito, non ho idea del perché lo spazio sia stato aggiunto nella versione Spectrum.