WABAC 머신 , 셔먼을 설정하십시오 . 이 질문은 일반적으로 BASIC, 특히 Microsoft의 BASIC-80 에 관한 것입니다. 올드 스쿨 기본. 줄 번호와 함께.
루프 본문이 실행되지 않았을 때 구식 BASIC 인터프리터가 FOR ... NEXT 루프를 어떻게 처리하고 NEXT 문이 순서대로 나타나지 않았습니까?
이전 시간의 비 순차적 NEXT 문 :
다음 은 David H. Ahl의 "101 Basic Computer Games"에서 Awari 게임의 서브 루틴입니다 .
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
흐름 제어를 제외한 모든 것이 수정되었습니다.
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 루프는 동일한 NEXT 문을 공유합니다.
- 두 번째 FOR 루프의 NEXT 문은 소스 순서로, 그 뒤에는 실행 순서로옵니다.
그러면 FOR 루프를 시작한 인터프리터가 NEXT 루프에서 발생할 때까지 명령문을 실행한다고 가정 할 수 있습니다. 이 경우 소스의 진술 순서는 중요하지 않습니다. 그러나 FOR 루프에 대해 basic80 매뉴얼에서 무엇을 말해야하는지 보자.
basic-80 매뉴얼은 "moo ..."라고 말합니다.
단계의 부호에 루프의 초기 값이 단계의 부호에 대한 최종 값의 시간을 초과하면 루프의 본문이 생략됩니다.
따라서 루프 본문을 완전히 건너 뛸 수 있습니다.
우리는 출판 된 프로그램의 형태로, 적어도 일부 버전의 BASIC이 그들의 NEXT 문장을 동적으로 찾는다는 증거를 가지고 있습니다. 루프 바디가 실행될 때 쉽게 할 수 있습니다. 그러나 BASIC-80이 허용하는 것처럼 FOR 문의 본문을 건너 뛰어야하는 경우 BASIC 은 소스 문에서 FOR 문 앞에 있을 수 있다는 점을 고려하여 NEXT 문을 어떻게 찾 습니까?
- "101 기본 컴퓨터 게임"에 사용 된 BASIC 버전은 항상 루프 본문을 한 번 이상 실행 했습니까?
- BASIC-80은 소스 순서대로 FOR 문 다음에 FOR 루프의 NEXT 문이 필요합니까?
추신 : 예, 저는 구식 BASIC을위한 BASIC 통역사를 쓰고 있습니다. 병입니다.
NEXT
명령문 을 구현하는 코드 는 $ DCF9에서 시작합니다.