?DO — 조건부 루프 시작
?DO — 조건부 루프 시작
?DO(question-do)는 루프 한계가 시작과 같으면 루프 본문을 건너뛰는 루프 시작 단어예요.
본문
실행 (Execution)
( limit start -- ) ( R: -- loop-sys )
설명
limit과 start를 비교해요. 같으면 루프를 건너뛰고, LOOP/+LOOP 뒤에서 실행을 계속해요. 그렇지 않으면 루프 제어 매개변수를 설정하고 루프 본문을 실행해요.
참조 (See)
- 6.1.0140 +LOOP
- 6.1.1240 DO
- 6.1.1680 I
- 6.1.1760 LEAVE
- 6.1.1800 LOOP
- A.6.1.2390 ?DO
합리성 (Rationale)
전형적인 사용:
: X ... ?DO ... LOOP ... ;
테스트 (Testing)
: qd1 ?DO I 10 +LOOP ;
T{ 0 0 qd1 -> }T
T{ 0 1 qd1 -> 0 1 2 3 4 5 6 7 8 9 }T
T{ 1 0 qd1 -> }T
: qd2 ?DO I 3 > IF LEAVE ELSE I THEN LOOP ;
T{ 0 1 qd2 -> 0 1 2 }T
: qd3 ?DO I 1 +LOOP ;
T{ 0 0 qd3 -> }T
T{ 0 3 qd3 -> 0 1 2 }T
T{ 3 0 qd3 -> }T
: qd4 ?DO I -1 +LOOP ;
T{ 0 0 qd4 -> }T
T{ 2 0 qd4 -> 2 1 0 -1 -2 }T
: qd5 ?DO I -10 +LOOP ;
T{ 1 0 qd5 -> 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 }T