map, filter, fold, apply 사용하기

컬렉션을 왼쪽부터 훑는 결정적 파이프라인을 만듭니다. 콜백 인자 수와 결과 컨텍스트는 명시적으로 드러냅니다.

실행으로 확인하기

LISPEX
(reduce + 0 (map (lambda (x) (* x x)) (filter odd? (list 1 2 3 4))))

관측 결과

OUTPUT
10

패턴 따라가기

  1. 고릅니다. filterodd?가 참인 13을 남깁니다.
  2. 바꿉니다. map이 남은 값을 같은 순서로 제곱해 (1 9)를 만듭니다.
  3. 합칩니다. reduce0에서 시작해 각 제곱을 더하여 10을 만듭니다.

이 순서로 생각하세요

  • 요소마다 결과를 하나씩 얻으려면 map, 참인 것만 고르려면 filter, 하나로 누적된 결과를 얻으려면 fold를 사용합니다.
  • 엄격한 불리언 답이 정해지는 즉시 순회를 멈추려면 all?이나 any?를 사용합니다.
  • 콜백은 게스트 프로시저로 실행됩니다. 그래서 오류, 탈출, 경고, 값 컨텍스트 규칙이 그대로 적용됩니다.
  • string-mapvector-map은 새 컬렉션을 만들고, 각 for-each 변형은 효과만 실행한 뒤 0개 값을 반환합니다.
  • 마지막 올바른 리스트를 위치 인자로 펼칠 때 apply를 사용합니다. 이 호출은 꼬리 적용을 보존합니다.

직접 확인하기

odd?even?로 바꾸면 같은 파이프라인은 무엇을 반환할까요?

24를 남겨 (4 16)으로 제곱하고 20을 반환합니다.

흔한 오해

단일 값 순회 위치에서 콜백이 값을 0개 내거나 여러 개 내면 E320이 발생합니다.

다음으로

정확한 콜백 인자 수는 레퍼런스에서 확인하세요. 관리되는 조합기로 순회 모양이 잘 표현되지 않을 때는 재귀를 사용합니다.

고차 프로시저 레퍼런스 · 재귀 가이드