이 페이지는 리스펙스의 핵심 고차 함수에 대한 참조를 제공합니다. 이 함수들은 다른 함수를 인자로 받아 리스트를 처리하며, 강력하고 선언적인 프로그래밍 스타일을 가능하게 합니다.
map
주어진 함수를 리스트의 모든 요소에 적용하고, 그 결과를 포함하는 새 리스트를 반환합니다. 새 리스트는 항상 원본 리스트와 동일한 수의 요소를 가집니다.
- 구문:
(map FUNCTION LIST) - 인자:
FUNCTION: 하나의 인자(리스트 요소)를 받아 변환된 값을 반환하는 함수.LIST: 반복 처리할 리스트.
- 반환: 변환된 요소들을 포함하는 새 리스트.
- 오류: 인자가 각각 함수와 리스트가 아니면
RuntimeError를 발생시킵니다.
예시:
;; 각 숫자를 제곱한 새 리스트를 생성합니다.
(map (lambda (n) (* n n)) (list 1 2 3 4))
;; 결과: (list 1 4 9 16)
filter
주어진 조건자(predicate) 함수가 참 같은 값(즉 #f가 아닌 값)을 반환하는 원본 리스트의 요소들만 포함하는 새 리스트를 반환합니다.
- 구문:
(filter PREDICATE_FUNCTION LIST) - 인자:
PREDICATE_FUNCTION: 하나의 인자를 받아 불리언 값(#t이면 유지,#f이면 폐기)을 반환하는 함수.LIST: 필터링할 리스트.
- 반환: 원본보다 짧거나 같은 길이일 수 있는 새 리스트.
- 오류: 인자가 각각 함수와 리스트가 아니면
RuntimeError를 발생시킵니다.
예시:
;; 5보다 큰 숫자만 있는 새 리스트를 생성합니다.
(filter (lambda (n) (> n 5)) (list 2 8 4 10 5 7))
;; 결과: (list 8 10 7)
reduce
함수를 반복적으로 적용하여 리스트를 단일 값으로 축약합니다. 리스트를 순회하며 각 단계에서 업데이트되는 "누산기(accumulator)"를 유지합니다.
- 구문:
(reduce FUNCTION INITIAL_VALUE LIST) - 인자:
FUNCTION: 두 개의 인자(누산기, 현재_요소)를 받는 함수. 누산기의 새 값을 반환해야 합니다.INITIAL_VALUE: 누산기의 시작 값.LIST: 축약할 리스트.
- 반환: 전체 리스트를 순회한 후의 누산기의 최종 값.
- 오류: 인자가 함수, 값, 리스트가 아니면
RuntimeError를 발생시킵니다.
예시: 리스트의 모든 숫자 합산하기
(reduce (lambda (sum el) (+ sum el))
0
(list 10 20 30 40))
;; 결과: 100
예시: 리스트에서 가장 긴 단어 찾기
(reduce (lambda (longest word)
(if (> (length word) (length longest))
word
longest))
""
(list "Lispex" "is" "a" "delightful" "language"))
;; 결과: "delightful"