루프의 경우

For loop
루프 플로우 다이어그램의 경우

컴퓨터 과학에서 for-loop(또는 단순히 for-loop)은 반복을 지정하기 위한 제어 흐름문으로, 코드가 반복적으로 실행될 수 있도록 한다.이 문을 지정하기 위해 다양한 키워드가 사용됩니다. ALGOL의 하위 항목은 "for"를 사용하고 Fortran의 하위 항목은 "do"를 사용합니다.예를 들어 "PERform VARIGINE"을 사용하는 COBOL과 같은 다른 방법이 있습니다.

for-loop은 반복을 지정하는 헤더와 반복마다 한 번씩 실행되는 본문의 두 부분으로 구성됩니다.헤더는 종종 명시적인 루프카운터 또는 루프 변수를 선언합니다.이를 통해 본문은 어떤 반복이 실행되고 있는지 알 수 있습니다.for-loops는 일반적으로 루프에 들어가기 전에 반복 횟수를 알고 있을 때 사용됩니다.for-loops는 루프 변수를 증가시켜 테스트하는 while-loops의 속기로 간주할 수 있습니다.

for-loop이라는 이름은 for라는 단어에서 유래했습니다.이 단어는 많은 프로그래밍 언어에서 for-loop을 도입하기 위한 키워드로 사용됩니다.영어 용어는 ALGOL 58로 거슬러 올라가며, 영향력 있는 후기 ALGOL 60에서 대중화되었습니다. 이는 ALGOL 58과 ALGOL [citation needed]60의 정의에 관여한 하인츠 루티샤우저가 슈퍼플랜(1949-1951)에서 사용한 초기 독일어 für의 직역입니다.루프 본문은 지정된 루프 변수의 값에 대해 "지정"됩니다.다만, ALGOL 버전의 스테이트먼트에서는, 가능한 값이나 증분의 리스트를 지정할 수 있습니다.

Fortran 및 PL/I에서는 키워드 DO가 같은 것에 사용되며, 이를 do-loop이라고 부릅니다.이것은 do-while 루프와는 다릅니다.

위해서

루프 그림의 경우 i=0에서 i=2로, 결과적으로 data1=200이 됩니다.

for-loop 문은 대부분의 필수 프로그래밍 언어로 사용할 수 있습니다.구문의 작은 차이를 무시하더라도 이러한 문장의 작동 방식과 지원 표현 수준에는 많은 차이가 있습니다.일반적으로 for-loops는 다음 범주 중 하나로 분류됩니다.

종래의 포루프

ALGOL, Simula, BASIC, Pascal, Modula, Oberon, Ada, Matlab, Ocaml, F# 등의 언어 for-loop에는 다음과 같은 시작값과 끝값을 가진 제어 변수가 필요합니다.

위해서 i = 첫번째 로. 지난 하다 진술 (* 또는 *만) 위해서 i = 첫번째..지난 하다 진술 

언어에 따라 등호 대신 명시적 할당 기호를 사용할 수 있습니다(일부 언어에는 해당 단어가 필요합니다).int(숫자의 경우에도)옵션 스텝 값(증감 1 1)도 포함할 수 있습니다.다만, 이것에 사용하는 정확한 구문은 언어 마다 조금 다릅니다.제어 변수의 개별 선언이 필요한 언어도 있고 그렇지 않은 언어도 있습니다.

또 다른 형태는 C 프로그래밍 언어에 의해 대중화되었다.여기에는 초기화(루프 배리언트), 조건 및 다음 반복으로의 진행의 3가지 부분이 필요합니다.이 세 가지 부품은 모두 [1]옵션입니다.이러한 유형의 "세미콜론 루프"는 B 프로그래밍 언어에서 유래되었으며, 원래 스티븐 [2]존슨이 발명했습니다.

초기화 부분에서는 필요한 모든 변수가 선언됩니다(통상은 값이 할당됩니다).여러 변수가 선언된 경우 모두 동일한 유형이어야 합니다.조건부는 특정 조건을 체크하고 false일 경우 루프가 실행되지 않은 경우에도 루프를 종료합니다.조건이 true일 경우 루프 내의 코드 행이 실행됩니다.루프가 종료될 때마다 정확히 한 번 다음 반복 부분으로 진행됩니다.조건이 true로 평가되면 루프가 반복됩니다.

다음은 Java에서의 전통적인 C 스타일 for-loop의 예입니다.

// 0 ~ 99(및 100이 아님)의 숫자를 출력합니다.각 숫자 뒤에 공백이 표시됩니다.   위해서 (인트 i=0; i< >100; i++)   {     시스템..나가..인쇄물(i);     시스템..나가..인쇄물(' '); } 시스템..나가..인쇄(); 

이러한 루프는 foreach 루프와 대조되어 숫자형 for-loops라고도 불립니다(아래 참조).

반복기 기반 루프

이러한 유형의 for-loop은 숫자 시퀀스 이외의 항목 세트를 열거할 수 있기 때문에 for-loop의 숫자 범위 유형을 일반화한 것입니다.보통 암시적 또는 명시적 반복을 사용하는 것이 특징입니다.이 경우 루프 변수는 시퀀스 또는 기타 데이터 수집의 각 값을 담당합니다.Python의 대표적인 예는 다음과 같습니다.

위해서 아이템  어떤_iterable_object:     무엇인가 하다()     do_something_something_something() 

어디에some_iterable_object은 암묵적인 반복(직원 이름 목록 등)을 지원하는 데이터 수집이거나 실제로는 반복자일 수 있습니다.일부 언어에는 다른 for-loop 구문과 더불어 이 구문이 있습니다. 특히 PHP에는 이러한 유형의 루프가 있습니다.for each, 및 이름 아래 3개의 변환 for-loop(아래 참조)이 있습니다.for.

벡터화된 루프

일부 언어에서는 모든 반복을 병렬로 처리하는 것처럼 작동하는 for-loop을 제공합니다.for all FORTRAN 95의 키워드는 명시적 반복 형식과 구별되도록 모든 우측 표현이 할당되기 에 평가된다는 해석을 가지고 있습니다.예를 들어,for다음 pseudocode fragment에 있는 스테이트먼트(새로운 값 계산 시)A(i)첫 번째 (with)를 제외하고i = 2)에 대한 참조A(i - 1)는 이전 단계에서 배치한 새로운 값을 가져옵니다.에서for all단, 각 계산은 변경되지 않은 원본만 참조합니다.A.

i : = 2 : N - 1 do A(i) : = [A(i - 1) + A(i) + A(i) + A(i + 1)] / 3; 다음 i; 모든 i : = 2 : N - 1 do A(i - 1) / 3;

차이가 유의할 수 있습니다.

일부 언어(예: FORTRAN 95, PL/I)에서는 어레이 할당문을 제공하므로 많은 for-loops를 생략할 수 있습니다.따라서 다음과 같은 의사 코드A := 0;크기나 치수에 관계없이 어레이 A의 모든 요소를 0으로 설정합니다.루프 예는 다음과 같이 렌더링할 수 있습니다.

 A(2 : N - 1) := [A(1 : N - 2) + A(2 : N - 1) + A(3 : N)] / 3; 

단, 그것이 for-loop 또는 all-loop 또는 기타 어떤 형태로 렌더링될지는 컴파일러 매뉴얼에서 명확하게 설명되지 않을 수 있습니다.

복합 루프

ALGOL 68에서 도입되어 PL/I에 이어 루프의 반복을 테스트와 조합할 수 있습니다.

i : = 1 : N, A(i) > 0 do 등입니다. 

즉, 값이 루프 변수i에 할당되어 while expression이 true인 경우에만 루프 본문이 실행됩니다.결과가 false일 경우 for-loop의 실행은 짧게 중지됩니다.루프 변수의 이 루프의 종료 후에 정의되는 것을 전제로 하면, 상기의 스테이트먼트는 어레이 A의 첫 번째 비양성 요소(그 값이 없는 경우는 N + 1) 또는 적절한 바리에이션이 있는 경우 문자열의 첫 번째 비양성 문자를 찾습니다.

루프 카운터

컴퓨터 프로그래밍에서 루프 카운터는 루프(컴퓨터 프로그래밍 언어 구성)의 반복을 제어하는 제어 변수입니다.이 구성을 사용하는 대부분의 경우 변수가 일부 순서 있는 시퀀스에서 정수 값의 범위를 차지하기 때문에 이 이름이 붙여졌습니다(예: 0에서 시작하여 10에서 1씩 증분).

루프 카운터는 루프가 반복될 때마다 변화하며 반복마다 원하는 값을 제공합니다.루프 카운터는 루프가 종료되는 타이밍과 프로그램플로우가 루프 후 다음 명령으로 계속 진행되도록 결정하기 위해 사용됩니다.

일반적인 식별자 명명 규칙은 루프 카운터가 변수 이름 i, j k(필요한 경우 등)를 사용하는 것입니다.여기서 i는 가장 바깥쪽 루프, j는 다음 안쪽 루프 등입니다.일부 프로그래머는 역순도 사용합니다.이 스타일은 일반적으로 Fortran의[citation needed] 초기 프로그래밍에서 비롯되었다는 데 동의하며, 여기서 이들 문자로 시작하는 변수 이름은 암묵적으로 정수 타입으로 선언되었으며, 일시적으로만 필요한 루프 카운터에 대한 명백한 선택도 마찬가지입니다.이 관행은 수학 표기법으로 거슬러 올라가며, 여기과 곱셈의 지수종종 i, j 등입니다.변형 규약은 인덱스 ii, jj kk에 중복된 문자를 사용하는 것입니다. 이렇게 하면 [3]단일 문자를 사용하는 것보다 검색 및 치환이 용이하기 때문입니다.

루프에 대해 중첩된 C 코드의 예를 나타냅니다.루프 카운터 변수는 i 및 j입니다.

위해서 (i = 0; i < > 100; i++) {     위해서 (j = i; j < > 10; j++) {         기능(i, j);     } } 

C 의 루프의 경우는, 단어의 역인쇄에도 사용할 수 있습니다.예를 들면:

위해서 (i = 0; i < > 6; i++) {     스캔(%c, &a[i]); } 위해서 (i = 4; i >= 0; i--) {     인쇄물(%c, a[i]); } 

여기서 입력이 다음과 같은 경우apple출력은 다음과 같습니다.elppa.

추가 의미론 및 구성

무한 루프로 사용

이 C 스타일의 for-loop은 반복의 기본 단계가 완전히 프로그래머의 제어에 있기 때문에 일반적으로 무한 루프의 원천입니다.실제로 무한 루프를 의도하는 경우 다음과 같은 (빈 식과 함께) 이러한 유형의 for-loop을 사용할 수 있습니다.

위해서 (;;)     //루프 본체 

이 스타일은 infinite 대신 사용됩니다.while (1)일부 C/C++ [4]컴파일러에서 유형 변환 경고를 피하기 위해 루프를 설정합니다.일부 프로그래머는 보다 간결한 것을 선호합니다.for (;;)의미론적으로는 동등하지만 보다 장황한 형태로 형성while (true)형태.

조기 종료 및 계속

일부 언어는 또한 다른 지원 문구를 제공할 수 있으며, 이것이 존재하면 for-loop 반복이 진행되는 방법을 변경할 수 있습니다.이들 중 공통적인 것은 C와 파생상품에서 볼 수 있는 중단 및 계속 진술이다.break 문을 사용하면 실행 시 내부 최단 루프가 즉시 종료됩니다.continue 문은 현재 반복에 대한 루프 본문을 통과하지 않고 다음 반복으로 즉시 이동합니다.for 문은 스테이트먼트 본문 내의 브레이크, goto 또는 리턴 스테이트먼트가 실행되었을 때에도 종료됩니다.[글쎄요] 다른 언어에서도 유사한 문장이 있거나 FORTRAN 95에서와 같이 for-loop 진행을 변경할 수 있는 수단을 제공할 수 있습니다.

하다I = 1, N   진술들               !'I'의 모든 값에 대해 실행되며, 재해가 발생할 경우까지 실행됩니다.   한다면 (아니요. 좋아요.) 사이클       !이 값 "I"는 건너뛰고 다음 단계로 계속 진행합니다.   진술들               !선한 곳에서만 처형되었습니다.   한다면 (재앙) 퇴장       루프를 포기해!   진술들               !좋을 때 그리고 재앙은 없습니다. 종료 작업                     !"DO"에 맞춰야 합니다. 

언어에 따라서는 여러 개의 중첩된 루프가 어떤 루프가 관련되어 있는지 의심할 여지가 없도록 다양한 루프 스테이트먼트의 이름 지정 등의 추가 기능을 제공합니다.Fortran 95의 예:

X1:하다I = 1,N      진술들   X2:하다J = 1,M        진술들        한다면 (곤란) 사이클X1        진술들      종료 작업X2      진술들    종료 작업X1 

따라서 내부 루프에서 "트러블"이 검출된 경우, CYCLE X1(X2가 아님)은 J가 아닌 I의 다음 반복으로 건너뛰는 것을 의미합니다.또한 컴파일러는 각 END DO에 적절한 라벨이 붙어 있는지 확인합니다.이것은 단순한 문서 지원이 아닙니다.프로그래머는 여전히 문제를 올바르게 코드화할 필요가 있지만, 일부 오류는 차단됩니다.

루프 변수 범위 및 의미론

언어마다 루프 변수가 루프 종료 시 어떤 값을 유지할지에 대한 규칙이 다르며, 실제로 일부 언어에서는 루프 변수가 "정의되지 않음"으로 간주합니다.이를 통해 컴파일러는 루프 변수에 값을 남기는 코드를 생성할 수 있습니다.또한 루프 값이 레지스터에 저장되어 메모리에 저장되지 않았기 때문에 값을 변경하지 않을 수도 있습니다.실제 동작은 Honywell Fortran66 컴파일러와 마찬가지로 컴파일러의 최적화 설정에 따라 달라질 수 있습니다.

(C 또는 C++가 아닌) 일부 언어에서는 루프 변수는 루프 본체의 범위 내에서 불변하며, 그 값을 변경하려는 시도는 시멘틱오류로 간주됩니다.이러한 수정은 프로그래머의 오류로 인해 발생할 수 있으며, 이는 한 번 이루어지면 식별하기가 매우 어려울 수 있습니다.다만, 컴파일러는 명백한 변경만을 검출할 가능성이 있습니다.루프 변수의 주소가 서브루틴에 인수로서 전달되는 상황은 루틴의 동작을 컴파일러가 일반적으로 알 수 없기 때문에 체크하는 것을 매우 어렵게 합니다.Fortran 스타일의 몇 가지 예는 다음과 같습니다.

하다I = 1, N   I = 7                           !루프 변수의 오버트 조정.컴파일러에서 문제가 발생할 수 있습니다.   Z = 조정한다.(I)                   !기능 "ADJUST"가 "I"를 변경해 효과가 불확실할 수 있습니다.   보통의 진술들               !'I'가 루프 변수인 메모리가 희미해질 수 있습니다.   인쇄하다 (A(I), B(I), I = 1, N, 2) !"I"를 재사용하여 어레이 A 및 B의 홀수 요소를 인쇄하려면 for-loop을 암시합니다.   인쇄하다I                         !어떤 가치를 제시합니까? 종료 작업                            !루프는 몇 번 실행됩니까? 

일반적인 접근법은 루프 시작 시 반복 횟수를 계산하는 것입니다(와 같이 오버플로에 주의하여).for i := 0 : 65535 do ... ;16비트 정수 산술) 및 각 반복 감소에 따라 이 카운트를 동시에 조정합니다.결과를 이중으로 세다.그러나 루프 내에서 I 을 조정해도 실행되는 반복 횟수는 변경되지 않습니다.

또 다른 가능성은 생성된 코드가 루프 변수로서 보조 변수를 사용할 수 있으며, 기계 레지스터에 보유될 수 있으며, 그 값은 각 반복에서 I에 복사될 수도 있고 복사되지 않을 수도 있습니다.I의 변경은 루프의 제어에는 영향을 주지 않지만, 현재는 분리가 가능합니다.루프 내에서는 I의 (변경될 가능성이 있는) 전류값 또는 보조변수(부적절한 변경으로부터 안전한)에 대한 참조가 되어 혼란스러운 결과가 보증됩니다.예를 들어, 루프 내에서 어레이의 요소 I에 대한 참조는 보조 변수(특히 그것이 머신 레지스터에 보관되어 있는 경우)를 사용할 가능성이 높지만, 내가 어떤 루틴의 파라미터(예를 들어 값을 나타내는 인쇄문)인 경우에는 적절한 변수 I에 대한 참조가 될 수 있습니다.그런 일은 피하는 것이 상책이다

경계의 조정

인덱스 변수가 for-loop 내에서 수정되는 것과 마찬가지로 그 경계와 방향도 변경할 수 있습니다.하지만 불확실한 효과.컴파일러는 이러한 시도를 막을 수도 있고, 효과가 없을 수도 있고, 심지어 제대로 작동할 수도 있습니다. 그러나 많은 사람들은 그렇게 하는 것이 잘못이라고 선언합니다.다음과 같은 진술을 고려하십시오.

i : = first : last : 스텝 A(i) : = A(i) / A(last);

이러한 루프를 컴파일하기 위한 접근방식이 첫 번째, 마지막 스텝의 평가와 다음과 같은 방법을 통한 반복 횟수 계산일 경우(last - first)/step처음에 한 번만 해당 항목이 단순 변수이고 반복 중에 값이 조정된 경우, 이는 나눗셈을 위해 선택된 요소가 반복 횟수에 영향을 미치지 않을 것이다.A(last)변경되었다.

값 범위 목록

PL/I 및 Algol 68은 루프 변수가 단일 범위가 아닌 값의 범위 목록에 걸쳐 반복되는 루프를 허용합니다.다음 PL/I 예에서는 i 값 1, 7, 12, 13, 14, 15를 사용하여 루프를 실행합니다.

i = 1, 7, 12~15; /*문*/;

루프 중 등가성

for-loop은 일반적으로 while-loop과 동일합니다.

요인 : = 2 ~ 5 요인 카운터의 경우 1 : = 요인 * 카운터 카운터 : = 카운터 - 1 인쇄 카운터 + "! = " + 요인

는 다음과 같습니다.

요인 := 1 카운터 := 1인 반면 카운터 < 5 카운터 := 카운터 + 1 요인 := 요인 * 카운터 인쇄 카운터 + "! = " + 요인

변수 출력으로 알 수 있습니다.

다양한 프로그래밍 언어의 for-loop 구문 연대표

예를 들어 다섯 번 반복해야 하는 동작을 지정하면 언어별로 for loops가 다르게 작성됩니다.3가지 표현식 for-loop의 구문은 블록 끝의 다른 스타일 등을 고려한 후, 이 구문을 가진 모든 언어에서 거의 동일합니다.

1957년: 포트란

Fortran의 for 루프와 동등한 은 DO 루프이며, for 대신 키워드 do를 사용합니다. Fortran의 DO 루프의 구문은 다음과 같습니다.

        하다라벨. 계산대 = 첫번째, 지난, 걸음           진술들 라벨.     진술 

다음 2개의 예는 다른 언어의 3개의 for-loop 인수와 동일하게 동작하며 카운터 변수를 1로 초기화하고 루프를 반복할 때마다 1씩 증가시켜 5에서 정지합니다(포함).

        하다9, 계산대 = 1, 5, 1           기입하다 (6,8) 계산대     8     포맷( I2 )     9   계속하다. 

Fortran 77(또는 그 이후)에서는, 다음과 같이 기술할 수도 있습니다.

하다계산대 = 1, 5   쓰다(*, '(i2)') 계산대 end do를 하다 

스텝이 1인 경우 스텝 부분을 생략할 수 있습니다.예제:

* DO 루프의 예        프로그램.주된          SQ = 0          하다199 I = 1, 9999999            한다면 (SQ.GT.1000) 가세요 로. 200 199        SQ = SQ + I**2 200      인쇄하다206, 섬수 206      포맷( I2 )        끝. 

고정 형식 Fortran 문에서는 공백이 중요하지 않으므로 SUM SQ는 SUMSQ와 동일합니다. 현대의 자유 형식 Fortran 스타일에서는 공백이 중요합니다.

Fortran 90에서는 EX를 사용하여 GO TO를 회피할 수 있습니다.IT 기술서.

* DO 루프의 예        프로그램.주된          암묵적 없음           정수 :: 합계          정수 :: i           합계 = 0          하다i = 1, 9999999            한다면 (합계 > 1000.0) 퇴장            합계 = 합계 + i**2           end do를 하다          인쇄물 *, 합계         종료 프로그램 

1958년: 알골

ALGOL 58은for스테이트먼트(Superplan으로 폼 사용):

FOR 식별자 = 기준(차이) 한계

예를 들어, 0 ~10 을 1씩 증가시켜 인쇄하는 경우:

x = 0 (1) 10 BEGIN PRINT (FL) = x END의 경우

1960: COBOL

코볼은 1959년 말에 공식화되었고 많은 세부사항을 가지고 있다.여러 옵션을 가진 PERFORM 동사를 사용합니다.원래 모든 루프는 반복 코드가 별도의 단락을 차지하고 있는 상태에서 선을 벗어나야 했습니다.변수 선언 및 초기화의 필요성을 무시하면 for-loop과 동등한 COBOL이 됩니다.

      수행하다 SQ루틴 변화하고 있다 I 부터 1 타고 1 까지 I > 1000        SQ루틴              더하다 I**2 로. SUM-SQ. 

1980년대에 인라인 루프와 END-PERformance와 같은 "구조화된" 스테이트먼트의 추가는 보다 친숙한 구조의 for-loop을 낳았다.

      수행하다 변화하고 있다 I 부터 1 타고 1 까지 I > 1000              더하다 I**2 로. SUM-SQ.       최종 퍼포먼스 

PERFORM 동사에 TEST AFTER 옵션구가 있는 경우 루프 본문은 테스트 전에 적어도1회 실행됩니다.

1964: 베이직

BASIC의 루프는 다음 루프에 대해 호출되는 경우가 있습니다.

10 1 ~ 15 의 홀수 번호를 루프 인쇄하는 경우는, 이것을 기억해 주세요. 20 위해서 I = 1 로. 15 걸음 2 30 인쇄하다 I 40 다음 분. I 

end-loop 마커는 인덱스 변수 이름을 지정합니다.인덱스 변수는 for-loop 시작 시 인덱스 변수 이름에 대응해야 합니다.일부 언어(PL/I, FORTRAN 95 및 이후)에서는 컴파일러에 의해 대응하는 엔드 루프 스테이트먼트 상의 동일한 텍스트와 대조될 수 있는 for-loop 시작 시 스테이트먼트 라벨이 허용됩니다.또한 Fortran은EXIT그리고.CYCLE이 텍스트에 이름을 붙이는 스테이트먼트.루프의 네스트에서는, 어느 루프가 의도되고 있는지를 명확하게 합니다.단, 이러한 언어에서는 라벨이 고유해야 합니다.따라서 동일한 인덱스 변수를 포함하는 연속된 루프는 동일한 텍스트를 사용할 수 없습니다.또한 루프의 인덱스 변수 등의 변수 이름과 라벨이 같을 수도 없습니다.

1964: PL/I

do counter = 1~5 by 1. *//* statements*/; end가 지정되지 않은 경우 /* "by 1"이 기본값입니다.

LEVE 문을 사용하여 루프를 종료할 수 있습니다.루프에 라벨을 붙일 수 있으며, leave에 따라 네스트된 루프 그룹에 라벨이 지정된 특정 루프가 남을 수 있습니다.일부 PL/I 방언에는 현재 루프 반복을 종료하고 다음 루프 반복을 시작하는 ITERATE 문이 포함되어 있습니다.

1968: 알골 68

ALGOL 68에는 유니버설루프라고 생각되는 것이 있습니다.전체 구문은 다음과 같습니다.

i의 경우 i to4 DO ~ OD 동안 1x2에서 3까지

또한 단일 반복 범위를 해당 범위의 목록으로 대체할 수 있다.이 구조에는 몇 가지 특이한 측면이 있다.

  • 오직 그do ~ od이 경우 루프가 무기한 반복됩니다.
  • 그 조항은 이렇다.to 100 do ~ od는 정확하게 100회 반복됩니다.
  • while 통사적 요소는 프로그래머가 에서 벗어날 수 있도록 했다.for다음과 같이 조기에 루프합니다.
INT sum sq : = 0, FOR i WHIRE 인쇄("지금까지:", i, new line), # 트레이스 목적으로 삽입되었습니다.# sum sq 70 70 ↑ 2 # WHY # DO sum sq + : ↑ i ↑ 2 OD에 대한 검정입니다.

표준 Algol68에 대한 후속 확장에 의해to대체되는 통사적 요소upto그리고.downto작은 최적화를 달성할 수 있습니다.같은 컴파일러에도 다음 컴파일러가 포함되어 있습니다.

until
레이트 루프 종료의 경우.
foreach
병렬 어레이에서 작업할 수 있습니다.

1970: 파스칼

위해서 계산대 := 1 로. 5 하다   (*스테이트먼트*); 

감소(뒤로 카운트)가 사용되고 있습니다.downto대신 키워드to예를 들어 다음과 같습니다.

위해서 계산대 := 5 까지 1 하다   (*스테이트먼트*); 

숫자 범위 for-loop은 약간 다릅니다.

1972: C/C++

위해서 (초기화; 조건.; 증량/감소.)     진술 

문장은 보통 block 문입니다.그 예로는 다음과 같습니다.

//for-loops를 사용하여 숫자 1~5 추가 인트  = 0; 위해서 (인트 i = 1; i < > 6; ++i) {      += i; } 

ISO/IEC 9899:1999의 간행물(일반적으로 C99로 알려져 있음)에서는, 다음의 장소에서 최초의 선언을 실시할 수도 있습니다.for루프. for 루프의 3가지 섹션은 모두 옵션입니다.

1972년: Smalltalk

1 ~ 5 do : [ : counter "statements ]

다른 언어와는 달리, Smalltalk에서 for-loop은 언어 구조가 아니라 self를 시작 값으로 사용하는 두 개의 매개 변수, end 값과 closure를 가진 메서드로 클래스 번호에 정의됩니다.

1980: Ada

위해서 계산대  1 .. 5 고리    -- 스테이트먼트 끝. 고리; 

exit 문을 사용하여 루프를 종료할 수 있습니다.루프에 라벨을 붙일 수 있으며, exit에서는 네스트된 루프 그룹에 특정 라벨이 붙은 루프가 남을 수 있습니다.

계산:     위해서 계산대  1 .. 5 고리    삼각형:        위해서 세컨더리_색인  2 .. 계산대 고리           -- 스테이트먼트           퇴장 계산;           -- 스테이트먼트        끝. 고리 삼각형;     끝. 고리 계산; 

1980: 메이플

메이플은 두 가지 형태의 for-loop을 가지고 있는데, 하나는 값 범위의 반복을 위한 것이고 다른 하나는 용기의 내용물에 걸쳐 반복하는 것입니다.값 범위 형식은 다음과 같습니다.

i경우 f by b에서 t까지 w do #루프 본체 od;

를 제외한 모든 부품do그리고.od옵션입니다.for i있는 경우 부품이 먼저 와야 합니다.나머지 부분(from f,by b,to t,while w)는 임의의 순서로 표시됩니다.

컨테이너를 통한 반복은 다음 형식의 루프를 사용하여 수행됩니다.

e in c 동안 w do # 루프 본체 od;

in cclause는 컨테이너를 지정합니다.컨테이너는 목록, 세트, 합계, 곱, 미가변함수, 배열 또는 반복기를 구현하는 개체일 수 있습니다.

for-loop은 다음과 같이 종료할 수 있습니다.od,end, 또는end do.

1982년 : Maxima CAS

Maxima CAS에서는 정수 이외의 값도 사용할 수 있습니다.

x:0.5 스텝 0.1에서 0.9까지 /* "x로 작업" */

1982년 : PostScript

for-loop은 다음과 같이 기술되어 있습니다.[initial] [increment] [limit] { ... } for는 내부변수를 초기화하여 내부변수가 제한(증분이 음수인 경우에는 그 이상)을 넘지 않는 한 본문을 실행하고 각 반복의 마지막에 내부변수를 증분합니다.각 반복 전에 내부 변수 값이 [5]스택에 푸시됩니다.

1 1 6 {진술들} 위해서 

단순한 반복 루프도 있습니다.repeat-loop(반복 루프)은 다음과 같이 기술됩니다.X { ... } repeat는 본문을 정확히 X회 [6]반복합니다.

5 { 진술들 } 따라하다 

1983: Ada 83 이상

절차. 주된    Sum_Sq : 정수 := 0; 시작한다.   위해서 I  1 .. 9999999 고리      한다면 Sum_Sq <=> 1000 그리고나서       Sum_Sq := Sum_Sq + I**2     끝. 한다면;   끝. 고리; 끝.; 

1984년: MATLAB

위해서 n = 1:5       -- 진술들 끝. 

루프 후에n이 예에서는 5가 됩니다.

~하듯이iImaginal 유닛에 사용되며 루프 변수로 사용하는 것은 권장되지 않습니다.

1987: Perl

위해서 ($카운터 = 1; $카운터 <=> 5; $카운터++) { # 암묵적 또는 사전 정의된 변수     스테이트먼트 수 } 위해서 (나의 $카운터 = 1; $카운터 <=> 5; $카운터++) { # 루프 전용 변수     스테이트먼트 수 } 위해서 (1..5) { # 변수는 암묵적으로 $_라고 불리며, 1 . 5는 이들 5가지 요소의 목록을 만듭니다.     스테이트먼트 수 } 진술 위해서 1..5; # 자연어 순서와 거의 같은 (1개의 문장에 불과) 위해서 나의 $카운터 (1..5) { # 루프 전용 변수     스테이트먼트 수 } 

("여러 가지 방법이 있다"는 것은 Perl의 프로그래밍 모토입니다.)

1988: 매스매티카

대부분의 다른 언어의 for-loop에 대응하는 구조를 Mathematica에서는 Do라고 부른다.

하다[f[x], {x, 0, 1, 0.1}] 

Mathematica는 또한 C-like 언어의 for-loop을 모방하는 For 구조를 가지고 있다.

위해서[x= 0 , x <=> 1, x += 0.1,     f[x] ] 

1989년: Bash

# i in 1 2 3 4 5 do #의 번째 폼은 루프 에코 $i #의 최소1개의 명령어를 가지고 있어야 합니다.i값을 인쇄해 주세요.
# ( i = 1 ; i < = 5 ; i+ + ) do #의 두 번째 은 루프 에코 $i #명령어를 적어도1개 가지고 있어야 합니다.단, i값만 출력합니다.

빈 루프(즉, 명령어가 없는 루프)는do그리고.done)는 구문 오류입니다.위의 루프가 주석만 포함하는 경우 실행 시 "syntax error near unexpected token 'done' 메시지가 나타납니다.

1990: 하스켈

M_에 내장된 필수 명령어는 다음과 같이 모노딕 식을 목록에 매핑합니다.

M_ [1..5] $ \인덱스 -> 하다 진술들 

또는 각 반복 결과를 목록으로 가져옵니다.

statements_result_list <-> 형태 [1..5] $ \인덱스 -> 하다 진술들 

단, [1..5]목록의 공간을 절약하려면 보다 확실한 forLoop_구조를 다음과 같이 정의할 수 있습니다.

수입품 통제.모나드 ~하듯이 M  LoopM_의 경우 :: 모나드 m => a -> (a -> ) -> (a -> a) -> (a -> m ()) -> m () LoopM_의 경우 인덱스 받침대 인크루드 f = 하다         f 인덱스         M.언제 (받침대 다음 분.) $ LoopM_의 경우 다음 분. 받침대 인크루드 f   어디에           다음 분. = 인크루드 인덱스 

및 다음 용도로 사용됩니다.

  LoopM_의 경우 (0::내부) (< > ) (+1) $ \인덱스 -> 하다 --지수가 어떻게 되든 

1991년: Oberon-2, Oberon-07 또는 컴포넌트 Pascal

위해서 계산대 := 1 로. 5 하다   (*스테이트먼트 시퀀스*) 끝. 

원래의 오베론 언어에서는 보다 일반적인 오베론 루프 구조를 위해 for-loop이 생략되었습니다.포루프는 오베론-2에서 다시 도입되었다.

1991년: Python

Python은 고전적인 for 루프를 포함하지 않습니다.foreach루프는 빌트인의 출력에 대해 반복하기 위해 사용됩니다.range()반복 가능한 정수 시퀀스를 반환하는 함수입니다.

위해서 i  범위(1, 6):  #는 1~5의 값을 제공합니다(6은 제외).     문수     인쇄물(i) # 6을 원하는 경우 다음을 수행해야 합니다. 위해서 i  범위(1, 6 + 1):  #는 1 ~6의 i 값을 나타냅니다.     문수     인쇄물(i) 

사용.range(6)0 ~ 5 의 루프를 실행합니다.

1993년: AppleScript

따라하다 와 함께 i 부터 1 로. 5  -- 스테이트먼트  로그. i 끝. 따라하다 

다른 언어의 배열에서 수행할 수 있는 작업과 마찬가지로 항목 목록을 반복할 수도 있습니다.

세트 x 로. {1, "오류", "실패", 5.1, 거짓의} 따라하다 와 함께 i  x  로그. i 끝. 따라하다 

를 사용할 수도 있습니다.exit repeat언제든지 루프를 종료할 수 있습니다.다른 언어와는 달리 AppleScript에는 현재 루프의 다음 반복을 계속하기 위한 명령어가 없습니다.

1993년: Lua

위해서 i = 개시하다, 이제 그만, 간격 하다   -- 스테이트먼트 끝. 

그래서 이 코드는

위해서 i = 1, 5, 2 하다   인쇄물(i) 끝. 

인쇄:

1 3 5 

For-loops는 다음 방법을 사용하여 테이블을 루프할 수도 있습니다.

아이페어() 

어레이를 통해 수치적으로 반복하다

쌍들() 

사전에서 무작위로 반복하다

폐쇄를 사용하는 일반적인 for-loop:

위해서 이름., 전화, 주소.  연락처() 하다   -- contacts()는 반복 함수여야 합니다. 끝. 

1995: CFML

스크립트 구문

단순 인덱스 루프:

위해서 (i = 1; i <=> 5; i++) {  // 문 } 

배열 사용:

위해서 (i  [1,2,3,4,5]) {  // 문 } 

문자열 값 목록 사용:

고리 색인='나' 목록.="1;2,3;4,5" 구분자=",;" {  // 문 } 

상기의list예는 LuceeRailo에서 사용되는 CFML 방언으로만 사용할 수 있습니다.

태그 구문

단순 인덱스 루프:

< cfloop > 색인='나' 부터="1" 로.="5">  <!---문 ---> </cfloop> 

배열 사용:

< cfloop > 색인='나' 배열="#[1,2,3,4,5]#">  <!---문 ---> </cfloop> 

문자열 값의 "목록" 사용:

< cfloop > 색인='나' 목록.="1;2,3;4,5" 구분자=",;">  <!---문 ---> </cfloop> 

1995: Java

위해서 (인트 i = 0; i < > 5; i++) {     //루프 내에서 기능을 수행합니다.     //'break;' 문을 사용하여 조기 종료할 수 있습니다.     //'displicate;' 문을 사용하여 현재 반복을 건너뛸 수 있습니다. } 

확장 for-loop에 대해서는 Foreach loop » Java를 참조하십시오.

1995: JavaScript

JavaScript는 C 스타일의 "3-expression" 루프를 지원합니다.break그리고.continue문은 루프 내에서 지원됩니다.

위해서 (변화하다 i = 0; i < > 5; i++) {     // ... } 

또는 배열의 모든 키에 대해 반복할 수도 있습니다.

위해서 (변화하다 열쇠  배열) {  // 유사 어레이에서도 동작합니다.     // 배열 사용[키]     ... } 

1995: PHP

이렇게 하면 *의 삼각형이 출력됩니다.

위해서 (i달러 = 0; i달러 <=> 5; i달러++) {     위해서 (j달러 = 0; j달러 <=> i달러; j달러++) {         메아리치다 "*";     }     메아리치다 "<br />\n"; } 

1995년: 루비

위해서 계산대  1..5   문수 끝.  5.시대 하다  계산대   0 ~ 4의 카운터 반복 횟수   문수 끝.  1.까지(5) 하다  계산대    문수 끝. 

Ruby에는 위의 샘플 등 몇 가지 구문이 있습니다.

1996년: OCaml

[7]구문을 참조하십시오.

 (* for_statement := "for" ident '=' expr ("to" ∣ "downto") expr "do" expr "done" *)  위해서 i = 1 로. 5 하다     (*문*)   다 했어요. ;;  위해서 j = 5 까지 0 하다     (*문*)   다 했어요. ;; 

1998: 액션스크립트 3

위해서 (변화하다 계산대:설치하다 = 1; 계산대 <=> 5; 계산대++){     //스테이트먼트; } 

2008: Small Basic

위해서 i = 1 로. 10     ' 스테이트먼트 종료 대상 

2008년: Nim

Nim은foreach-type loop 및 반복기 [8]작성을 위한 다양한 조작을 수행합니다.

위해서 i  5 .. 10:   문수 

2009: 시작

위해서 i := 0; i <=> 10; i++ {     // 문 } 

2010: 녹

위해서 i  0..10 {     // 문 } 

2012년: Julia

위해서 j = 1:10     문수 끝. 

「 」를 참조해 주세요.

레퍼런스

  1. ^ "For loops in C++".
  2. ^ Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". Archived from the original on 2021-12-12. Retrieved 2020-11-16. I saw Johnson's semicolon version of the for loop and I put that in [B], I stole it.
  3. ^ http://www.knosof.co.uk/vulnerabilities/loopcntrl.pdf C의 루프 제어 변수 분석
  4. ^ "Compiler Warning (level 4) C4127". Microsoft. Retrieved 29 June 2011.
  5. ^ PostScript Language Reference. Addison-Wesley Publishing Company. p. 596. ISBN 0-201-37922-8.
  6. ^ "PostScript Tutorial - Loops".
  7. ^ "OCaml expression syntax". Archived from the original on 2013-04-12. Retrieved 2013-03-19.
  8. ^ https://nim-lang.org/docs/system.html #...i%2CT%2CT "..반복자"