이전 문서입니다. 리스트를 만들고 읽는 방법은 현재 리스트와 복합 값 프로시저에서 확인하세요.
이 페이지는 리스펙스에서 리스트를 생성하거나 조작하는 내장 함수에 대한 참조를 제공합니다. 이 함수들은 핵심 함수 참조에 있는 함수들을 보완합니다.
cons
기존 리스트의 앞에 요소를 추가하여 새 리스트를 구성합니다. "Cons"는 "construct(구성하다)"의 줄임말입니다.
- 구문:
(cons ELEMENT LIST) - 인자:
ELEMENT: 앞에 추가할 새 요소.LIST: 요소가 추가될 기존 리스트.
- 반환: 새 리스트.
- 오류: 두 번째 인자가 리스트가 아니면
RuntimeError를 발생시킵니다.
예시:
(cons 1 (list 2 3 4))
;; 결과: (list 1 2 3 4)
(cons (list "a") (list "b" "c"))
;; 결과: (list (list "a") "b" "c")append
두 리스트를 함께 이어 붙여 하나의 새 리스트를 생성합니다.
- 구문:
(append LIST_1 LIST_2) - 인자:
LIST_1: 첫 번째 리스트.LIST_2: 두 번째 리스트.
- 반환:
LIST_1의 모든 요소 다음에LIST_2의 모든 요소가 오는 새 리스트. - 오류: 어느 한쪽 인자라도 리스트가 아니면
RuntimeError를 발생시킵니다.
예시:
(append (list 1 2) (list 3 4))
;; 결과: (list 1 2 3 4)
(append (list) (list 1 2))
;; 결과: (list 1 2)nth
리스트에서 특정 0 기반 인덱스에 있는 요소를 반환합니다.
- 구문:
(nth LIST INDEX) - 인자:
LIST: 요소를 검색할 리스트.INDEX: 검색할 요소의 정수 인덱스 (0부터 시작).
- 반환: 지정된 인덱스의 요소.
- 오류:
LIST가 리스트가 아니거나INDEX가 정수가 아니면RuntimeError를 발생시킵니다.INDEX가 범위를 벗어나면(0보다 작거나 리스트 길이보다 크거나 같으면)RuntimeError를 발생시킵니다.
예시:
(define my-list (list "a" "b" "c"))
(nth my-list 0)
;; 결과: "a"
(nth my-list 2)
;; 결과: "c"
(nth my-list 3)
;; RuntimeError 발생: 인덱스 3이 범위를 벗어남member
주어진 객체와 같은 요소를 리스트에서 찾아 첫 일치 지점부터 시작하는 부분 리스트를 반환합니다. 없으면 #f를 반환합니다. memv와 memq는 깊은 equal? 대신 eqv? 동등성으로 같은 검색을 합니다 (이 버전에서는 eqv?와 eq?가 일치하므로 memq는 memv처럼 동작합니다).
- 구문:
(member OBJ LIST) - 인자:
OBJ: 찾을 객체 (equal?로 비교,memv/memq는eqv?사용).LIST: 검색할 리스트.
- 반환: 첫 일치 요소부터의 부분 리스트, 없으면
#f. - 오류:
LIST가 적절한 리스트가 아니면RuntimeError를 발생시킵니다.
예시:
(member 2 (list 1 2 3))
;; 결과: (list 2 3)
(member 5 (list 1 2 3))
;; 결과: #fassoc
연관 리스트(쌍의 리스트)에서 키(각 항목의 car)가 주어진 객체와 같은 첫 쌍을 찾아 반환합니다. 없으면 #f를 반환합니다. assv와 assq는 equal? 대신 eqv?로 같은 조회를 합니다.
- 구문:
(assoc OBJ ALIST) - 인자:
OBJ: 조회할 키 (equal?로 비교,assv/assq는eqv?사용).ALIST: 모든 항목이 쌍인 연관 리스트.
- 반환:
car가 일치하는 첫 항목 쌍, 없으면#f. - 오류:
ALIST가 쌍으로 이루어진 적절한 리스트가 아니면RuntimeError를 발생시킵니다.
예시:
(assoc 2 (list (list 1 "one") (list 2 "two")))
;; 결과: (list 2 "two")
(assoc 9 (list (list 1 "one")))
;; 결과: #flist-tail
LST의 처음 K개 요소를 버린 부분 리스트, 곧 K번째 cdr를 반환합니다. 결과는 LST와 구조를 공유하며 복사하지 않습니다. LST의 길이가 K보다 작으면 오류입니다.
- 문법:
(list-tail LST K) - 인자:
LST: 리스트.K:LST의 길이를 넘지 않는 음이 아닌 정수.
- 반환: 처음
K개 요소를 제외한 부분 리스트(K가0이면LST자신). - 오류:
K가 음수이거나LST의 길이보다 크면RuntimeError를 발생시킵니다.
예시:
(list-tail (list 1 2 3 4) 2)
;; 결과: (list 3 4)list-copy
LST의 얕은 복사본, 곧 같은 요소를 담은 새 쌍 사슬을 반환합니다. 복사본은 원본과 eq?가 아니지만 요소 자체는 복제되지 않고 공유됩니다. 리스트가 아닌 객체는 그대로 반환됩니다.
- 문법:
(list-copy LST) - 인자:
LST: 리스트(또는 임의의 객체).
- 반환: 요소를 공유하는 새로 할당된 리스트 복사본.
예시:
(list-copy (list 1 2 3))
;; 결과: (list 1 2 3)