실행으로 확인하기
LISPEX
(reduce + 0 (map (lambda (x) (* x x)) (filter odd? (list 1 2 3 4))))관측 결과
OUTPUT
10패턴 따라가기
- 고릅니다.
filter는odd?가 참인1과3을 남깁니다. - 바꿉니다.
map이 남은 값을 같은 순서로 제곱해(1 9)를 만듭니다. - 합칩니다.
reduce가0에서 시작해 각 제곱을 더하여10을 만듭니다.
이 순서로 생각하세요
- 요소마다 결과를 하나씩 얻으려면
map, 참인 것만 고르려면filter, 하나로 누적된 결과를 얻으려면 fold를 사용합니다. - 엄격한 불리언 답이 정해지는 즉시 순회를 멈추려면
all?이나any?를 사용합니다. - 콜백은 게스트 프로시저로 실행됩니다. 그래서 오류, 탈출, 경고, 값 컨텍스트 규칙이 그대로 적용됩니다.
string-map과vector-map은 새 컬렉션을 만들고, 각for-each변형은 효과만 실행한 뒤 0개 값을 반환합니다.- 마지막 올바른 리스트를 위치 인자로 펼칠 때
apply를 사용합니다. 이 호출은 꼬리 적용을 보존합니다.
직접 확인하기
odd?를 even?로 바꾸면 같은 파이프라인은 무엇을 반환할까요?
답
2와 4를 남겨 (4 16)으로 제곱하고 20을 반환합니다.
흔한 오해
단일 값 순회 위치에서 콜백이 값을 0개 내거나 여러 개 내면 E320이 발생합니다.
다음으로
정확한 콜백 인자 수는 레퍼런스에서 확인하세요. 관리되는 조합기로 순회 모양이 잘 표현되지 않을 때는 재귀를 사용합니다.