오토캐드(AUTO CAD) 리습(Lisp) 리스트 추출 함수 Assoc Car Cdr Nth

1. 리스트 추출 함수

오토캐드의 객체 속성은 리스트의 묶음으로 이루어져 있습니다. 객체의 속성을 나타내는 DXF 코드를 확인하면, 객체에 따라 나열되는 리스트가 모두 다른데요. 오늘은 리스트 추출 함수 ASSOC, CAR, CDR, NTH에 대해서 자세히 살펴보겠습니다.

1) CAR

CAR 함수는 리스트 목록의 첫 번째 항목을 추출합니다. 예를 들어 (1 2 3 4 5)이라는 리스트 항목에서 CAR 함수를 사용하게 되면 첫 번째 항목 “1”을 추출하게 됩니다. 아래 예시는 CAD 명령 창에서 실행하면 결과를 확인할 수 있습니다.

<예시>
(CAR (LIST 1 2 3 4 5))
(CAR'(1 2 3 4 5))
(CAR '(A B C))

AUTOLISP-리스트 추출 함수-CAR

2) CDR

CDR 함수는 리스트 항목의 첫 번째 항목을 제외한 나머지 항목을 추출합니다. (1 2 3 4 5)와 같은 리스트 항목에 사용하면 결과는 첫 번째 항목을 제외한 (2 3 4 5)를 반환합니다. 여기서 주의할 점은 첫 번째 항목을 제외한 나머지 데이터를 추출하기 때문에 괄호가 포함된 리스트를 출력합니다.

<예시>
(CDR (LIST 1 2 3 4 5))
(CDR '(1 2 3 4 5))
(CDR '(A B C))

AUTOLISP-리스트 추출 함수-CDR

3) CADR

CADR 함수는 리스트 항목의 두 번째 항목을 추출합니다. CAR 함수와 CDR 함수의 결합으로 다음과 같은 수식과 같은 결과를 나타냅니다.

(CAR(CDR (LIST 1 2 3 4 5))) = 2 = CADR(LIST 1 2 3 4 5)

결과적으로 CADR은 CDR함수와 CAR 함수가 결합하여 만들어진 함수인 것을 확인할 수 있습니다. 외우지 마시고 이해하시기 바랍니다.



4) CADDR

CADDR 함수는 세 번째 항목을 추출합니다. CADR 함수와 마찬가지로 CAR 함수와 CDR 함수의 조합으로 표현할 수 있습니다.

(CAR(CDR(CDR (LIST 1 2 3 4 5)))) = 3 = (CADDR (LIST 1 2 3 4 5))

CDR을 두 번 실행한 리스트의 첫 번째 항목을 추출하여 결과는 “3”을 추출합니다. CADDR에서 “D”의 개수만큼 CDR을 실행한다고 생각하시면 이해하기 쉽습니다.



5) CADDDR

CADDDR 함수는 네 번째 항목을 추출합니다. 위에서 설명한 내용처럼 “D”의 개수를 파악하여 CDR을 세 번 실행한 리스트에 CAR을 실행하여 4번째 항목 추출합니다.

(CAR(CDR(CDR(CDR (LIST 1 2 3 4 5))))) = 4 = (CADDDR (LIST 1 2 3 4 5))



6) LAST

LAST 함수는 리스트의 마지막 항목을 추출하는 함수입니다. 리스트의 위치를 파악하기 위해 순서를 세지 않고 마지막 리스트를 출력할 수 있습니다.

<사용예시>
(LAST (LIST 1 2 3 4 5))



7) NTH

NTH 함수는 리스트 항목에서 지정된 번호를 출력하는 함수입니다. 사용형식은 “(NTH 번호 리스트)”이며, 시작 번호 “0”을 입력해야 첫 번째 항목을 추출하게 됩니다. 아래 예시를 캐드 명령 창에 실행하면 결과를 확인할 수 있습니다.

<사용예시>
(NTH 0 (LIST 1 2 3 4 5))
(NTH 1 (LIST 1 2 3 4 5))
(NTH 2 (LIST 1 2 3 4 5))
(NTH 3 (LIST 1 2 3 4 5))
(NTH 4 (LIST 1 2 3 4 5))

AUTOLISP-리스트 추출 함수-NTH

8) ASSOC

ASSOC 함수는 추출할 DXF 코드 번호를 입력하면 해당 DXF 속성을 추출합니다. 예를 들어 선(LINE)의 DXF 코드 목록에서 DXF 코드 번호 10을 입력하면 10번에 해당하는 데이터 리스트를 반환합니다.
사용형식은 (ASSOC 코드 번호 리스트) 형식으로 코드 번호에는 호출할 DXF 코드를 넣어주면 해당 리스트를 출력합니다.

<사용예시>
(SETQ ENT1(ENTGET(CAR(ENTSEL))))
(ASSOC 0 ENT1)
(ASSOC 10 ENT1)
(ASSOC 11 ENT1)

AUTOLISP-리스트 추출 함수-ASSOC

마치며

오늘은 AUTOLISP의 리스트 추출 함수에 대해서 살펴보았습니다. 설명을 위해 임의로 작성한 리스트(LIST)를 사용했는데요. AUTOCAD에서 실제로 다루게 되는 리스트는 객체 속성을 표현하는 DXF 코드 리스트입니다. 이러한 DXF 코드 리스트는 ASSOC 함수로 원하는 리스트를 추출하고 CAR, CDR, NTH, LAST 함수로 불러온 리스트에 내부 정보를 추출합니다. 추출된 리스트는 형태를 확인해야 하는데요. 괄호를 포함한 리스트인지, 내부의 값만 불러온 데이터인지 확인이 필요합니다. 자세한 상황 설명은 리습(LISP) 프로그램을 작성하면서 자세히 살펴보겠습니다. 오늘 내용이 유익하셨기 바랍니다.

Leave a Comment