리스트 연산: 데이터와 코드의 춤

리스펙스에서 리스트는 단순한 데이터 구조가 아닙니다. 그것은 코드 자체의 표현입니다. 리스트를 다루는 기술은 생각의 흐름을 엮고, 데이터에 구조를 부여하며, 코드에 동적인 생명력을 불어넣는 예술과 같습니다.

이 페이지는 리스펙스에서 리스트를 생성하거나 조작하는 내장 함수에 대한 참조를 제공합니다. 이 함수들은 핵심 함수 참조에 있는 함수들을 보완합니다.


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이 범위를 벗어남