상세 컨텐츠

본문 제목

지정된 횟수만큼 반복하는 함수 "repeat"

IT & Programming/LISP 공부

by 그림아이 2021. 12. 24. 05:00

본문

반응형

프로그래밍의 강점은 동일한 동작을 정확하게 반복할 수 있다는 점에 있습니다. 이번 기사에서 해설하는 함수 "repeat"는 반복 처리를 할 수 있기 때문에 바로 강점의 상징 입니다.

AutoLISP로 AutoCAD의 작업을 효율화하고 싶은 분에게 매우 유익한 내용이 되고 있습니다. 사용 예와 함께 해설하고 있으므로 꼭 봐 주세요.

덧붙여서, repeat 이외에도 「while」라고 하는 조건을 만족하는 한 반복 처리를 계속하는 함수가 있습니다. 이미 다뤘으니 여기서는 생략하고 repeat 함수만 설명하겠습니다.

 

repeat 동작

repeat는 동일한 처리를 지정된 횟수만큼 반복하는 함수입니다. repeat 내에는 반복하고 싶은 처리를 복수 기술할 수가 있습니다. 반복 횟수에는 정수 를 지정하십시오.

사용예 ① 5개의 동심원 만들기

반복 처리로 5개의 동심원을 작성하는 예입니다. 중심은 (0,0)으로 반경을 1씩 크게 합니다.

(setq center (list 0 0))
(setq radius 1)
(repeat 5
  (command "circle" center radius)
  (setq radius (1+ radius))
)

우선, 중심 좌표(0,0)를 변수 center에 격납하고, 최초의 원의 반경인 수치의 1을 변수 radius에 격납하고 있습니다. 이 예제는 이해하기 쉽기 때문에 setq를 두 줄로 나누어 각 변수에 값을 저장하지만 한 줄로 묶어도 괜찮습니다.

 

repeat의 뒤에 기술하고 있는 것이 반복의 횟수입니다. 이번에는 5개 엔을 작성하기 때문에 수치의 5를 지정하고 있습니다. 원 작성 명령 circle을 호출하여 원을 작성한 후, 작성하는 원의 반경을 1만큼 증가시키는 동작이 반복됩니다.

 

실행 결과는 다음과 같습니다.

 

원 작도 예제1

덧붙여서 변수의 값을 1만큼 증가시키는 연산을 인크리먼트(increment)라고 부릅니다. AutoLISP에서는 "1+"라는 함수로 실행할 수 있습니다. 또, 1만큼 감소시키는 연산은 디크리먼트(decrement)라고 불려 「1-」로 표현할 수 있습니다.

 

사용예② 리스트에 저장된 좌표를 중심으로 원을 작성한다

리스트에 저장된 좌표를 차례로 꺼내서 원을 작성하는 예입니다. 원의 반경은 1입니다.

(setq pt1 (list 0 0))
(setq pt2 (list 2 2))
(setq pt3 (list 4 4))
(setq lst (list pt1 pt2 pt3))
(setq n 0)
(repeat (length lst)
  (command "circle" (nth n lst) 1)
  (setq n (1+ n))
)

변수 pt1~pt3에 좌표를 격납한 후, 그 좌표를 변수 lst에 리스트로서 격납합니다. length로 얻은 변수 lst의 요소 수는 repeat의 반복 횟수입니다. 이 예에서는 세 번 반복합니다.

증가의 변수 n과 n번째의 요소를 취득하는 함수 nth에 의해, 반복할 때마다 중심 좌표가 바뀌어 가기 때문에 각각의 좌표에 원을 작성할 수 있습니다.

 

실행 결과는 다음과 같습니다.

 

원 작도 예제2

repeat 형식

repeat 구문과 인수 및 반환 값은 다음과 같습니다.

구문
(repeat int [expr ...] )
인수
int반복 횟수. 정수로 지정.expr반복 처리. 복수 기술할 수 있어 생략도 가능.
반환값
마지막 평가 결과 / nil반복의 마지막에 평가된 결과가 돌려주어진다. expr 이 생략되면 nil을 반환합니다.

요약

이번 정리

  • repeat는 지정된 횟수만큼 동일한 처리를 반복합니다.
  • 지정하는 반복 횟수는 정수입니다.

 

728x90
반응형

'IT & Programming > LISP 공부' 카테고리의 다른 글

AutoLISP의 도형 이름 함수  (0) 2021.12.25
AutoLISP 선택 세트 ssget  (0) 2021.12.24
AutoLISP의 변수  (0) 2021.12.24
AutoLISP의 문자열 함수  (0) 2021.12.23
조건을 만족하는 한 반복하는 함수 「while」  (0) 2021.12.23

관련글 더보기

댓글 영역