오토캐드(AUTO CAD) 리습(Lisp) 조건 및 반복 함수 Repeat-If-Progn-Cond-While

1. 조건 및 반복 함수

리습(Lisp)에서 조건을 사용하여 원하는 동작과 데이터 처리를 위해 여러 함수를 사용합니다. 조건과 반복 횟수를 적절히 사용하면 다양한 구문을 작성할 수 있는데요. 오늘은 조건 및 반복 함수 Repeat, If, Progn, Cond, While 에 대해서 살펴보겠습니다.

1) Repeat

(Repeat int(정수) (실행문))

지정된 횟수(정수)만큼 실행문을 반복합니다. 이때 정수는 정수를 대체할 수 있는 변수도 사용할 수 있습니다.
(setq x 0 y 0)
(setq n 10)
(repeat n (setq pt (LIST x y))(command "circle" pt "5")(setq x (+ 10 x)))


반복 횟수를 지정하는 변수 n에 10을 저장하고 실행횟수를 10으로 지정합니다. Repeat 함수를 실행하여 실행문을 10회 반복합니다.

조건 및 반복 함수-repeat

2) IF 함수

(If (조건) (실행문1)(실행문2))

조건이 참이면 실행문 1을 실행하고, 조건이 거짓이면 실행문 2를 실행합니다. 거짓에 대한 실행문은 생략이 가능합니다.


<조건문 예시>
① a=b ▶ (= a b) : a와 b가 같다면,
② a>b ▶ (> a b) : a가 b보다 크다면,
③ ab ▶ (/= a b) : a와 b가 다르다면,
⑤ a>=b ▶ (>= a b) : a가 b보다 크거나 같다면,
⑥ a<=b ▶ (<= a b) : a가 b보다 작거나 같다면,


<예시>
(SETQ A 1 B 2)
(IF (> A B) (PROMPT "참입니다.")(PROMPT "거짓입니다."))(PRINC)


조건 A>B 가 거짓이므로 실행문2를 실행하여 “거짓입니다.”를 호출합니다.

조건 및 반복 함수-if

3) Progn 함수

(If (조건) (Progn (실행문1) (…….) ) (Progn(실행문2) (….…)))

앞서 다룬 IF 함수의 구조는 (IF (조건) (실행문1) (실행문2)) 형태로 작동합니다. 이때 실행문에 여러 동작을 작성하려면 구문의 길이가 길어지게 됩니다. If 함수는 뒤에 오는 1번째 구문을 참 실행문 2번째 구문을 거짓 실행문으로 인식합니다. 동작을 위해서 괄호가 늘어나면 If 함수는 오류가 발생하는데요. 이때 Progn 함수로 참 실행문, 거짓 실행문 그룹을 나누면 If 함수가 오류 없이 작동합니다.

<예시>
(SETQ A 1 B 2)
(IF (> A B)
(Progn (Setq C 10) (Setq D 20))
(Progn (Setq C 20) (Setq D 40))
)


만약 Progn 함수를 사용하지 않고 변수 C, D를 지정하면 괄호의 개수가 맞지 않아 에러가 발생합니다. 이처럼 Progn 함수는 If 함수와 같이 참 또는 거짓의 실행문에 다양한 구문을 구분 지어 주기 위해 사용하는 함수입니다. 조건에 맞는 구문 실행을 위해 Progn 구문을 이용하면 다양한 동작을 구현할 수 있습니다.

조건 및 반복 함수-progn

4) Cond

(Cond ((조건문1)(실행문1)) ((조건문2)(실행문2))…..(t nill))

If 함수와 비슷한 함수로 여러 조건을 실행할 때 유용한 함수입니다. 각 조건을 만족할 때 구문을 실행합니다.

<예시>
(Setq str(getstring "\ YES(Y) or No(N)…..:"))
(Cond ((= str "Y")(setq aa 1)) ((= str "y")(setq aa 1)) ((= str "N")(setq aa 0)) ((= str "n")(setq aa 0)) (t nill))


대소문자 구분 없이 Y를 입력하면 aa 변수에 1을 입력하고 N을 입력하면 aa 변수에 0이 저장됩니다. 조건을 만족하는 값이 없으면 nill을 반환합니다.

조건 및 반복 함수-cond

5) While

(While (조건문) (실행문))

조건문을 만족할 때까지 실행문을 반복하는 함수입니다. If 함수처럼 조건식을 사용할 수 있으며, 조건이 nill을 반환하면 종료됩니다. While 함수를 사용하여 구문 작성 시 nill이 반환되지 않으면 무한 반복되니 주의하시기 바랍니다.

<예시>
(setq x 0 y 0)
(while (< x 100)
(Setq pt (LIST x y))
(Command "circle" pt "5")
(Setq x (+ 10 x)))


x와 y를 변수 0으로 지정하여 리스트 (0, 0)을 생성합니다. 생성된 리스트 pt를 중심으로 반지름이 “5”인 원을 생성합니다. 또한 x 좌표를 10mm씩 증가시켜 원을 생성하고 x 좌표가 100mm 미만이 되면 원 생성을 중지합니다.

조건 및 반복 함수-while

Leave a Comment