AutoCAD/Lisp

Defun 함수

Jaybi 2021. 4. 7. 10:49

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
 nil

 

 Command: !xy04
 nil

 

 

 

출처: www.lispcenter.net/Lisp/Lisp_10.htm