카운터 제어 반복문
for 문의 괄호 속 세 식은 각각 몇 번 계산될까?
되풀이하는 두 방법
되돌아가기와 다시 부르기
문장을 되풀이해 실행하는 방법은 둘입니다. 같은 문장으로 되돌아가는 반복(iteration)과, 함수가 자기 자신을 다시 부르는 재귀(recursion)입니다. 반복을 맡는 제어문이 반복문(iterative statement)입니다.
명령형 언어는 변수와 대입문이 중심인 언어, 함수형 언어는 함수를 적용해 계산하는 언어입니다(1강).
카운터 제어 반복문
세는 변수가 되풀이를 제어합니다
횟수를 세는 변수로 되풀이를 제어하는 반복문이 카운터 제어 반복문(counter-controlled loop)입니다. 세는 변수가 루프 변수입니다. 초기값에서 시작해 증가값만큼씩 변하다가 종료값에 이르면 끝납니다.
루프(loop)는 반복문을 가리키는 말이고, 본체(body)는 되풀이되는 문장들입니다. 값은 예시입니다.
설계에서 정할 것
언어마다 답이 다른 네 가지
카운터 제어 반복문을 설계할 때 언어가 정해야 하는 것들입니다. 이어지는 카드에서 언어마다 고른 답을 봅니다.
스코프는 이름이 보이는 범위입니다(4강). 초기값, 종료값, 증가값을 묶어 루프 매개변수라고도 부릅니다.
C 계열 언어의 for
첫째 식은 한 번, 나머지는 돌 때마다
C 계열 언어(C, C++, Java 등)의 for는 괄호 안에 식을 셋 씁니다. 첫째 식은 처음에 한 번만 평가하고, 나머지 둘은 돌 때마다 다시 평가합니다. 정해 둔 루프 변수가 없어 본체에서 무엇이든 바꿀 수 있습니다.
평가는 식을 계산해 값을 얻는 일입니다. i++는 i를 1 늘립니다. 둘째 식을 비우면 조건이 늘 참이라 무한 반복이 됩니다. 값은 예시입니다.
C++, Java, C#의 for
for 안에서 변수를 정의할 수 있습니다
C++은 C와 두 가지가 다릅니다. 조건에 불리언 식도 쓸 수 있고, 첫째 식에서 변수를 정의할 수 있습니다. 그 변수의 스코프는 정의한 곳부터 본체 끝까지입니다. Java와 C#은 조건이 반드시 불리언이어야 합니다.
스코프는 이름이 보이는 범위입니다(4강). int i는 정수 변수 i를 정의한다는 뜻입니다. 예시 코드입니다.
Python의 for
루프 변수가 값을 하나씩 받습니다
Python의 for는 루프 변수가 값 묶음에 든 값을 차례로 받습니다. range(5)는 0부터 4까지를 내놓고, [2, 4, 6]처럼 값을 직접 늘어놓아도 됩니다. 반복이 끝나도 루프 변수에는 마지막 값이 남습니다.
else 절은 반복이 정상으로 끝났을 때만 실행됩니다. break(7편)로 나가면 건너뜁니다. 예시 코드입니다.
F#의 반복
변수가 없으면 재귀로 돕니다
함수형 언어에는 변수가 없어 카운터를 둘 수 없습니다. 그래서 카운터 제어 반복을 재귀 함수로 흉내 냅니다. 횟수 n이 0 이하면 끝내고, 아니면 본체를 한 번 실행한 뒤 n - 1로 자신을 다시 부릅니다.
let rec은 자기 자신을 부르는 함수를 정의합니다. body는 본체 구실을 하는 함수이고, n = 3은 예시입니다.
다음 편