상세 컨텐츠

본문 제목

프로그래밍의 필수품! AutoLISP의 함수

IT & Programming/LISP 공부

by 그림아이 2021. 12. 22. 02:00

본문

반응형

"함수란 무엇입니까?"
"AutoLISP에서는 어떻게 함수를 정의합니까?"

 

이러한 의문이 있는 AutoCAD 사용자를 향해 AutoLISP의 함수에 대해 설명합니다.

프로그래밍에 있어서, 없어서는 안되는 존재인 함수의 사용법을 이해할 수 있게 되므로 꼭 봐 주세요.

 

함수란?

함수란 어느 데이터를 받아, 정해진 처리를 실시해, 그 결과를 돌려주는 명령 입니다.

함수의 이름을 「함수명」, 받는 데이터를 「인수」, 처리가 완료해 돌려주는 결과를 「반환값」이라고 부릅니다.

함수를 실행하려면 함수 이름과 인수가 필요하며 다음과 같이 설명합니다.

함수 형식

(함수 이름 인수 1 인수 2 ...)

함수에 따라서는 인수를 필요로 하지 않는 것이 있습니다.

또, 함수에는 「표준 함수」와 「사용자 정의 함수」의 2 종류가 존재합니다.

표준 함수란?

변수에 데이터를 대입하는 함수 「setq」, 리스트를 작성하는 함수 「list」등 미리 AutoLISP에 준비되어 있는 함수 를 「표준 함수」라고 부릅니다.

간단한 처리를 하는 것부터 복잡한 처리를 하는 것까지, 다양한 함수가 준비되어 있습니다.

기본적으로 Visual Stdio Code 등의 에디터로 기술할 때, 청자가 되는 것이 표준 함수입니다.

사용자 정의 함수란?

표준 함수를 조합하여 자신의 함수를 만드는 것을 " 함수 정의 "라고합니다.

또, 유저가 독자적으로 만든 함수 를 「사용자 정의 함수」라고 부릅니다.

함수 정의를 하려면 「defun」이라고 하는 표준 함수를 사용해, 다음과 같이 기술합니다.

함수 정의 설명

(defun 정의 함수 이름
 (인수 1 인수 2 ... / 로컬 변수 1 로컬 변수 2 ...)
)

다른 함수로부터 받은 데이터가 설정한 인수에 대입되어 정의 함수내에서 사용할 수 있습니다.

또, 인수의 뒤에 기술한, 「/」이후의 변수는 「로컬 변수」로서 정의됩니다.

지역 변수와 전역 변수

로컬 변수는 정의된 함수 내에서만 사용할 수 있는 변수 입니다.

정의된 함수 외부에서 초기화됩니다.

또, 다른 함수내에서 같은 이름의 로컬 변수가 정의되어 있어도 다른 변수로서 취급되기 때문에, 데이터가 중복되는 것은 없습니다.

로컬 변수의 구체적인 예

(defun test1 (/ a)
 (setq a 10)
)
(defun test2 (/ a)
 (print a)
)

위의 예에서는 두 함수 내에서 같은 이름의 로컬 변수 a가 정의되어 있습니다.

test1 함수는 변수 a에 10을 대입하고, test2 함수는 변수 a의 데이터를 표시합니다.

test1→test2의 순서로 실행하면 test2의 변수 a는 내용이 비어 있으므로 nil이 표시됩니다.

 

반대로 전역 변수는 모든 함수가 데이터를 공유하는 변수 입니다.

AutoLISP는 로컬 변수 이외의 변수를 글로벌 변수로 취급합니다.

또한 도면 파일을 닫지 않는 한 전역 변수의 데이터는 유지됩니다.

함수의 반환값

다른 프로그래밍 언어는 반환 값을 반환하기 때문에 어떤 작업도 필요합니다.

AutoLISP의 경우 함수 내에서 마지막으로 평가된 데이터가 자동으로 반환 되므로 특별한 처리가 필요하지 않습니다.

반환값의 예

(defun test (/ a)
 (setq a 15)
)

위의 예에서 test를 실행할 때 반환되는 값은 정수 15입니다.

함수 정의 방법 4종

일부는 앞에서 설명한 것도 있지만 함수 정의에는 다음 네 가지 형식이 있습니다.

인수 없음, 로컬 변수 정의 없음의 경우

다른 함수로부터 데이터를 받지 않고, 로컬 변수도 사용하지 않을 때는 다음의 기술을 합니다.

인수 없음, 로컬 변수 정의 없음

(defun 정의 함수 이름 ()
)

인수 없음, 로컬 변수 정의가 있는 경우

다른 함수로부터 데이터를 받지 않지만, 로컬 변수는 사용하는 경우는 다음의 기술을 합니다.

인수 없음, 로컬 변수 정의 있음

(defun 정의 함수 이름
 (/ 로컬 변수 1 로컬 변수 2 ...)
)

인수가 있고 로컬 변수 정의가없는 경우

다른 함수로부터 데이터를 받지만, 로컬 변수는 사용하지 않는 경우는 다음의 기술을 합니다.

인수 있음, 로컬 변수 정의 없음

(defun 정의 함수 이름
 (인수 1 인수 2 ...)
)

인수가 있고 로컬 변수 정의가있는 경우

다른 함수로부터 데이터를 받아, 로컬 변수도 사용하는 경우의 기술은 다음과 같습니다.

인수 있음, 로컬 변수 정의 있음

(defun 정의 함수 이름
 (인수 1 인수 2 ... / 로컬 변수 1 로컬 변수 2 ...)
)

사용자 정의 함수 명령화

정의 함수 이름 앞에 " c: "를 붙이면 사용자 정의 함수가 명령화됩니다.

따라서 AutoCAD 명령줄에 함수 이름을 입력하기만 하면 해당 함수를 실행할 수 있습니다.

아래 예제에서 test를 입력하면 명령줄에 hako가 표시됩니다.

사용자 정의 함수 명령화

(defun c:test ()
 (print "hako")
)

 

 

 

코멘트 아웃

프로그램의 식이 수십 행, 수백 행으로 늘어나면, 어디에서 어떤 처리를 하고 있는지 알기 어려워 버립니다.

따라서 프로그램 중간에 처리 설명을 작성해야 합니다.

AutoLISP는 세미콜론 ';' 이후에 주석 처리 되어 처리 설명을 작성할 수 있습니다.

코멘트 아웃 된 곳은 프로그램의 처리상, 무시됩니다.

주석 처리 예

(defun test (/ a)
 ; 변수 a에 10을 대입한다
 (setq a 10)
)

요약

이번 기사의 내용을 정리합니다.

이번 정리
  1. 함수란?
    • 특정 데이터를 수신하고 결정된 처리를 수행하고 결과를 반환하는 명령
    • 인수: 받는 데이터
    • 반환값: 처리 결과
  2. 표준 함수란?
    • 미리 AutoLISP에 제공된 함수
  3. 사용자 정의 함수란?
    • 표준 함수를 결합하여 사용자가 직접 정의한 함수
    • 함수 "defun"으로 정의하기
  4. 지역 변수와 전역 변수
    • 로컬 변수: 정의한 함수 내에서만 사용할 수 있는 변수
    • 전역 변수: 모든 함수에서 사용할 수 있는 변수
  5. 함수의 반환값
    • 함수 내에서 마지막으로 평가 된 데이터가 반환 값이됩니다.
  6. 사용자 정의 함수 명령화
    • 함수 이름 앞에 "c:"를 붙인다.
  7. 코멘트 아웃
    • 「;」이후는 코멘트 아웃된다

기사의 내용이나 AutoLISP로 잘 모르는 곳이 있는 것 같으면, 코멘트나 메일로 부담없이 연락해 주세요!

 

프로그래밍

728x90
반응형

관련글 더보기

댓글 영역