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입니다.

다음으로

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

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