반응형
리스트 생성
그냥 생성하기
(list 1 2 3 4)
;; => (1 2 3 4)
위의 경우가 가장 가독성은 좋은 코드이겠지만 보통은 아래처럼 백틱을 이용한 quote
구문을 많이 사용합니다.
'(1 2 3 4)
;; => (1 2 3 4)
순차적인 리스트 만들기
(number-sequence 2 5)
;; => (2 3 4 5)
굳이 정수가 아니라도 사용 가능하니 매뉴얼을 읽어봅시다.
리스트에 추가하기
제일 앞에 추가하기
(cons 1 '(2 3 4))
;; => (1 2 3 4)
리스트끼리 연결하기
(append '(1 2 3) '(4 5 6))
;; => (1 2 3 4 5 6)
리스트끼리 연결하기(2)
(let ((some-list '(1 2 3)))
(nconc some-list '(4))
some-list)
;; => (1 2 3 4)
nconc
는 리스트를 연결하는 용도로 사용할 수 있습니다. 다만 빈 리스트는 연결하는 데 사용할 수 없으므로 주의가 필요합니다.
append
와는 다르게 nconc
는 첫 번째 매개 변수의 값을 바꿔버리는 함수임을 주의합시다. nconc
의 리턴되는 값은 변경된 리스트의 값과 동일하므로 필요하면 이걸 받아서 쓸 수도 있습니다.
리스트에서 아이템 뽑아오기
첫 아이템
(car '(1 2 3 4))
;; => 1
car
라는 이상한(?) 이름 대신 first
라는 가독성이 좋은 함수를 쓸 수도 있습니다.
(first '(1 2 3 4))
;; => 1
마지막 아이템
(car (last '(1 2 3 4)))
;; => 4
last
의 결과는 (4)
처럼 리스트로 돌아오기 때문에 car
로 한번 더 빼줘야(?) 해당 원소를 구할 수 있습니다.
특정 위치(index)의 아이템
(nth 2 '(1 2 3 4))
;; => 3
nth
는 N th, 즉 'N번째' 라는 이름으로 이해하면 됩니다.
리스트의 여분 구하기
첫 엘리먼트를 제외한 리스트
(cdr '(1 2 3 4))
;; => (2 3 4)
cdr
이라는 이해하기 어려운 이름 대신 더 읽기 편한 rest
라는 이름의 함수를 이용할 수도 있습니다.
(rest '(1 2 3 4))
;; => (2 3 4)
마지막 엘리먼트를 제외한 리스트
(butlast '(1 2 3 4))
;; => (1 2 3)
butlast
함수는 옵션으로 3번째 인자를 제외하기 위한 엘리먼트 개수를 지정할 수 있습니다.
(butlast '(1 2 3 4) 2)
;; => (1 2)
특정 위치(index)의 엘리먼트를 제외한 리스트
(nthcdr 2 '(1 2 3 4))
;; => (3 4)
nth
와 cdr
을 붙인 듯한 이름이지요.
기타
(member "bar" '("foo" "bar" 1 2 3))
;; => ("bar" 1 2 3)
member
함수는 이름에서 알 수 있듯이 리스트에서 특정 엘리먼트가 존재하는지 테스트하는 함수입니다. 따라서 non-nil일 경우 멤버가 존재(contain)한다라는 의미로 사용합니다. 다만 리턴되는 결과가 발견 지점부터 나머지의 리스트를 돌려주기 때문에 리스트의 일부를 구하는 특수한 용도로 사용할 수 있습니다.
728x90
반응형
'기술적인 이야기 > 이맥스' 카테고리의 다른 글
Filter와 Map (Emacs Lisp) (1235) | 2020.03.30 |
---|---|
문자열 처리 함수들 (Emacs Lisp) (1020) | 2020.03.29 |
Emacs (1664) | 2020.03.24 |
파일/디렉토리 경로와 관련된 Emacs Lisp 함수들 (0) | 2020.03.23 |
파일 읽어서 내용 수정하고 저장하기 (Emacs Lisp) (0) | 2020.03.23 |
댓글