상세 컨텐츠

본문 제목

리스트의 요소를 치환하는 함수 「subst」

IT & Programming/LISP 공부

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

본문

반응형

이번 기사에서는 함수 " subst "에 대해 설명합니다.

AutoLISP에는 목록이라는 여러 데이터를 포함하는 상자가 있습니다.

리스트의 요소(리스트의 내용)를 꺼내거나, 추가해 여러가지 처리를 실시합니다만, subst 는 요소의 치환을 실시 할 수 있는 편리한 함수입니다.

사용 예를 섞어 해설해 가기 때문에 꼭 봐 주세요.

 

subst의 동작

목록의 요소를 검색하는 몇 가지 함수가 있지만 subst는 요소를 대체할 수 있는 귀중한 함수입니다. 도형 정의 데이터를 다시 쓰는 데 자주 사용되며 편집 작업을 자동화하는 데 큰 도움이 됩니다.

 

subst로 대체하려면 다음 세 가지 인수가 필요합니다. 순서가 바뀌지 않도록 주의해야 합니다.

  1. 대체 후 요소
  2. 대체 대상 요소
  3. 대상 목록

아래의 리스트를 예로 subst의 동작을 설명합니다. 덧붙여서, 리스트는 요소에 두 개의 요소로 구성된 리스트로 되어 있는 리스트 입니다.

;;;대체 전 리스트
((10 . "aa") (20 . "bb") (20 . "bb"))

선두 요소의 (10 . "aa") 를 (40 . "dd") 로 치환하는 경우를 생각합니다. 해당 인수는 다음과 같습니다.

  1. 대체 후 요소 ⇒ (40 . "dd")
  2. 대체 대상 요소 ⇒ (10 . "aa")
  3. 대상 목록 ⇒ ((10 . "aa") (20 . "bb") (20 . "bb"))

우선, 치환전의 리스트를 list와 cons를 사용해 작성해, 변수 lst에 격납합니다.

 

;;;리스트의 첫번째 요소를 대체
(setq lst (list (cons 10 "aa") (cons 20 "bb") (cons 20 "bb")))
(subst (cons 40 "dd") (cons 10 "aa") lst)

치환 후의 요소가 (40 . "dd"), 치환 대상의 요소가 (10 . "aa") 때문에 각각을 인수에 지정해, 마지막에 대상 리스트인 변수 lst 를 기술합니다.

이 경우 대체 후 리스트는 다음과 같습니다.

;;;대체 후 리스트
((40 . "dd") (20 . "bb") (20 . "bb"))

치환 후와 치환 전을 비교하면, 첫번째 요소만 변경되고 있는 것을 알 수 있습니다.

또한 subst는 대상 목록의 해당 요소를 모두 대체 합니다. 그 때문에, 상기의 예로 치환 대상의 요소를 (20 . "bb")로 했을 경우는 2번째뿐만 아니라 3번째의 요소도 치환되기 때문에 주의가 필요합니다.

;;;치환 대상을 (20. "bb")로 한 경우의 치환 후의 리스트
((10 . "aa") (40 . "cc") (40 . "cc"))

subst 형식

subst의 구문과 인수 및 반환값을 글머리 기호로 정리했으므로 참고로 해 주실 수 있으면 다행입니다.

구문
(subst new-item old-item lst )
인수
new-item대체 후 요소.old-item리스트내에 존재하는 치환되는 측의 요소.lst대체할 목록입니다.
반환값
목록lst 내에 존재하는 모든 old-item  new-item 으로 치환한 리스트를 돌려줍니다. lst 내에 old-item 이 존재하지 않는 경우는 lst 를 그대로 돌려줍니다.

요약

이번 정리

  • subst는 목록의 요소를 대체할 수 있습니다.
  • 리스트내에서 해당하는 요소는 모두 치환됩니다

 

리스트 프로그래밍

 

 

728x90
반응형

관련글 더보기

댓글 영역