여러분 모두 안녕하세요. 이번 6월은 매우 더운데 다들 지치시지는 않는지 걱정이네요. 오늘 여러분께 드릴 팁은 조건식에 따라서 반복할 수 있는 반복문 REPEAT입니다. for문을 이용해서 반복문을 이용하는게 가장 안정적이지만, 그래도 반복횟수는 모르는데 반복의 조건을 알고있다면, REPEAT문이 더욱 유용하게 쓰일 겁니다. C언어에서는 while문 같은 구문입니다. 우선 간단히 보자면,
1 2 3 4 5 6 |
IDL> repnum=10 IDL> repeat begin & repnum=repnum/2. & print,repnum & endrep until repnum lt 1 5.00000 2.50000 1.25000 0.625000 |
간단히 구성을 보자면, 기본적으로 ‘repeat’는 ‘until expression‘ 을 가지고 다닙니다. 조건이 참이 될 때까지 반복을 하게 되는 것이죠. while문이 참인경우에 반복하는 거와는 반대라는 점은 C계열의 언어를 사용하신 분들께는 조금 주의를 요하는 점이겠지요.
저기에서는 한줄로 표현되어있지만, &를 이용해서 여러줄을 표현한 관계로 begin과 endrep도 들어갔는데요. 이는 다른 반복문이나 조건문에서도 이용됩니다. 포트란에서 왔다고 하는데, C계열에서는 주로 {}같은 괄호를 생각할 수 있는 것입니다. 프로시저나 함수가 끝날 때 end 구문이 들어가므로, 반복문과 조건문에서는 end대신에 endrep가 들어갔다는 점을 유의해 주세요. (if에서는 endif, for에서는 endfor등으로 이용됩니다.)
아차 이러한 함수의 경우 다음과 같이 for문과 if문 그리고 break의 조합으로도 변환이 가능합니다.
1 2 3 4 5 6 |
IDL> repnum=10 IDL> for repi = 0,10 do begin & repnum=repnum/2. & print,repnum & if repnum lt 1 then break & endfor 5.00000 2.50000 1.25000 0.625000 |
일정한 반복횟수가 중요하다면, 이러한 구문도 이용할 수도 있으리라 생각합니다. 이것은 여러분이 조건에 따라서 더 맞는 것을 이용하면 되는 것이지요.
여기에서 모르시는 분들을 위한 추가적인 이야기를 하자면, &표시의 경우 줄을 넘기라는 표시입니다. 첫번째에 있는 repeat문의 경우 실제 표현되는 방식은
1 2 3 4 |
repeat begin repnum=repnum/2. print,repnum endrep until repnum lt 1 |
인 것이지요. 또한 이것과 반대의 경우는 $표시인데 다음줄에 있는 것도 한줄로 읽도록 하는 것입니다. 이것은
1 2 3 4 |
a=[1,2,3,4,$ 5,6,7,8,$ 9,10] ;a=[1,2,3,4,5,6,7,8,9,10]의 표현 |
으로 보시면 됩니다. 이런걸 알고 계시면 IDL쓰실 때 많은 도움이 될 겁니다.
원래는 REPEAT만 소개를 하려다가 잔걱정이 많아져서 다양한 이야기를 쓰게되었네요. 어찌되었던 오늘은 유용한 반복문인 REPEAT를 한번 확인해 보았습니다. 여러분들도 즐거운 IDL생활이 되기를 기대하겠습니다.