Ngôn ngữ lập trình đầu tiên tôi tiếp xúc là Sinclair BASIC . Giống như nhiều phương ngữ BASIC, nó yêu cầu tất cả các dòng mã nguồn được đánh số .
Kết quả là, sử dụng GO TO lệnh là thành ngữ và nhảy thực thi đến số dòng đã cho (không có nhãn).
Ngoài ra có một GO SUBlệnh liên quan có thể được sử dụng như một lệnh gọi hàm thô sơ. Một lần nữa, thực thi nhảy đến số dòng đã cho, nhưng khi RETURNđạt được lệnh, thực thi sẽ nhảy trở lại lệnh tiếp theo sau GO SUB.
Tương tự RUNlệnh sẽ khởi động lại thực hiện chương trình tại dòng đã cho.
Bất cứ ai đã dành bất kỳ thời gian nào trong trình thông dịch BASIC được đánh số dòng sẽ học cách sử dụng sơ đồ đánh số với các khoảng trống trong đó. Điều này là để dễ dàng hơn để chèn các dòng mã mới. Tuy nhiên, ngay cả khi đó, bạn vẫn có thể thấy mình cần chèn các dòng mới vào giữa các dòng được đánh số liên tiếp.
Đưa ra một danh sách BASIC được đánh số dòng làm đầu vào, xuất ra cùng một chương trình nhưng được đánh số lại sao cho số dòng bắt đầu ở mức 10 và tăng theo các bước 10. Danh sách đầu vào có thể có GO TOhoặc GO SUBcác lệnh, do đó, các số được liên kết với chúng cũng phải được điều chỉnh.
GO TOvàGO SUBcác lệnh hoặc là trên dòng riêng của họ hoặc ở cuốiIFTHENdòng. Nó an toàn để nói^(\d+) .*GO (TO|SUB) (\d+)$là đủ để phù hợp với dòng như vậy. Các lệnh trong dấu ngoặc kép nên được bỏ qua.RUNcác lệnh sẽ luôn nằm trên các dòng riêng của chúng. Trong trường hợp này, một số dòng là tùy chọn. Nếu nó bị thiếu, thì trình thông dịch chỉ cần bắt đầu ở đầu chương trình.Nếu một
GO TO,GO SUBhoặcRUNlệnh tham chiếu một dòng không tồn tại, thì thay vào đó, nó sẽ nhảy đến dòng được xác định tiếp theo. Mục nhập của bạn cần phải giải quyết vấn đề này và đảm bảo mọi tham chiếu dòng như vậy được cố định để chúng trỏ đến đúng dòng. Hành vi có thể không được xác định nếu một số dòng sau khi kết thúc chương trình được đưa ra trong một trong các lệnh này.Số dòng sẽ luôn là số nguyên dương từ 1 đến 9999 (theo hướng dẫn). Điều này có nghĩa là các chương trình đầu vào sẽ không bao giờ có nhiều hơn 999 dòng.
Các dòng đầu vào sẽ luôn được đánh số theo thứ tự tăng dần về số lượng.
Đối với mục đích của thách thức này, danh sách đầu vào sẽ chỉ chứa ASCII có thể in được. Bạn không cần phải lo lắng về bộ ký tự ZX. Như đã nói, nếu mục nhập của bạn thực sự được viết bằng ZX BASIC hoặc mã máy / lắp ráp z80 thích hợp (và có các trình giả lập ngoài đó ), thì bạn có thể chọn đầu vào của mình được mã hóa trong bộ ký tự ZX .
Bạn không được sử dụng bất kỳ thư viện hoặc tiện ích nào được thiết kế riêng cho mục đích này.
Ví dụ đầu vào:
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"
Kết quả ví dụ:
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"
Tôi muốn liên kết đến một hướng dẫn ZX BASIC. Điều tốt nhất tôi có thể tìm thấy dường như là http://www.wworldofspectrum.org/ZXBasicManual/index.html nhưng đây dường như là một liên kết chết. Máy wayback có một bản sao mặc dù .
GOTO 100 + A*10 và Phụ lục C của Hướng dẫn sử dụng phổ ZX liệt kê GO TOlà chấp nhận biểu thức số (không giới hạn đối với các hằng số). Đây là một cuộc thảo luận về giá trị của tính toán GOTOtrên ZX80 và ZX81. BTW, tôi không biết tại sao không gian được thêm vào trong phiên bản Spectrum.