Defun 함수
AutoLISP안에서는 별도의 함수와 프로그램을 구분하지 않으며 하나의 프로그램 안에서는 다중의 함수가 정의할 수 있고
각각의 함수는 프로그램으로서의 기능을 갖는다.
1. 함수선언시 유의 사항
(1) 함수의 이름은 항상 알파벳으로 시작하여야 한다.
(2) 함수명은 영문자와 숫자의 조합으로 이루어지며, 특수 기호(-, ;, ! 등)의 사용이 가능하다.
(3) 함수 안의 ()의 갯수는 반드시 같아야 한다.
(4) 세미콜론(;)은 주석이며, 그 행만을 포함한다.
2. DEFUN (DEfine FUNction)
(1) 기능
사용할 함수를 선언하는 함수(함수 이름을 정의함)
반환되는 값은 가장 나중에 지정되는 값으로 다중의 값을 반환하고 싶으면
List를 사용한다.
(2) 사용법
(DEFUN Function-name()
Expression
return value
)
3. 변수의 종류
(1) 광역 변수
변수들의 값은 프로그램이 끝난 후에도 없어지지 않고 존재한다.
비어 있는 괄호는 모든 변수를 광역 변수로 사용함을 의미한다.
(Defun sample-01()
Expression
)
(2) 지역 변수
괄호 안의 Slash 이후의 변수들은 프로그램이 실행될 때 프로그램 안에서만 값을 가진다.
(Defun sample-02( / variable variable ......)
Expression
)
(3) 독립 변수
프로그램 실행시 외부로부터 변수의 값을 받아들여 사용한다.
(Defun sample-03(variable variable ......)
Expression
)
(4) 명령어 정의 함수
Defun 함수를 사용하여 AutoCAD에 새로운 명령을 정의한다.
(Defun c:sample-04()
Expression
)
** 참고
명령어 정의 함수 외에 함수는 실행을 위하여 괄호를 사용해야만 한다.
4. 함수 선언 예
(1) 광역 변수를 사용하는 함수
예제 프로그램-01 |
결과 |
(defun sample-01() (setq x 100) (setq y (+ x x)) y ;; y값 반환 ) |
Command: (load "c:/sample") SAMPLE-01
Command: (setq y1 (sample-01)) 200
Command: !x 100
Command: !y 200
Command: !y1 200
|
모든 변수를 광역 변수로 선언 |
프로그램 종료 후 x와 y값은 계속 존재한다. |
(2) 지역 변수를 사용하는 함수
예제 프로그램-02 |
결과 |
(defun sample-02( / x y) (setq x 100) (setq y (+ x x)) (list x y) ;; x , y값을 List로 반환 ) |
Command: (load "c:/sample") SAMPLE-02
Command: (setq xylist (sample-02)) 200
Command: !x nil
Command: !y nil
Command : !xylist (100 200)
|
x와 y를 지역 변수로 선언 |
프로그램 종료후 x와 y의 값은 없어진다. |
(3) 독립 변수를 사용하는 함수
예제 프로그램-03 |
결과 |
(defun sample-03(x) ;; x값을 전달 받음 (setq y (+ x x)) y ;; y값 반환 )
|
Command: (load "c:/hello") SAMPLE
Command: (setq y1 (sample-03 100)) 200
Command: !x 100
Command: !y 200
Command: !y1 200
|
x를 독립 변수로 선언 |
프로그램 실행시 x의 값을 지정해야 한다. |
(4) 명령어 정의 함수
예제 프로그램-04 |
결과 |
(defun c:sample-04() (setq x 100) (setq y (+ x x)) ) |
Command: (load "c:/sample") SAMPLE-04
Command: sample-04 200
Command: !x 100
Command: !y 200
|
sample-04를 명령어 정의 함수로 지정 |
프로그램 실행시 괄호를 사용하지 않아도 된다. |
(5) 명령어 정의 함수를 이용한 예제 프로그램
사각형을 그리는 프로그램 |
|
(Defun c:sample-05( / xy01 xy02 xy03 xy04) (setq xy01 (list 100 100)) (setq xy03 (list 200 200)) (setq xy02 (list (car xy01) (cadr xy03))) (setq xy04 (list (car xy03) (cadr xy01))) (command "line" xy01 xy02 xy03 xy04 "c") ) |
Command: (load "c:/sample") C:SAMPLE-05
Command: sample-05 line From point: To point: To point: To point: To point: c Command: nil
Command: !xy01 nil
Command: !xy02 nil
Command: !xy03
Command: !xy04
|