실행으로 확인하기
LISPEX
(fold-right cons (list) (list 1 2 3))관측 결과
OUTPUT
(1 2 3)이 순서로 생각하세요
- 목록·문자열·벡터는 왼쪽부터 순회합니다. 예외는
fold-right로, 오른쪽부터(f element accumulator)를 호출합니다. reduce와fold-left는 같은 왼쪽 fold이며(f accumulator element)를 호출합니다.all?와any?는 답이 정해지는 즉시 멈추고 술어의 결과로#t나#f만 받습니다.filter는 일반 리스펙스 참값 규칙을 씁니다.for-each는 효과를 위해 실행하므로 콜백이 몇 개의 값을 내든 버리고, 자신도 0개 값을 반환합니다.- 콜백 오류와 일회용 탈출은 게스트 평가기 안에서 처리됩니다. LIL은
프로시저를 호스트
apply나 호스트 콜백으로 넘기지 않습니다.
콜백 계약
| 시그니처 | 순회 / 결과 | 값 컨텍스트 |
|---|---|---|
| (map proc list) | 왼쪽부터; 새 올바른 리스트 | 콜백 정확히 한 값 |
| (filter predicate list) | 왼쪽부터; 유지 요소 | 술어 정확히 한 값; #f만 제외 |
| (all? predicate list), (any? predicate list) | 왼쪽부터 단락 평가; 엄격 불리언 | 술어가 정확히 한 불리언 |
| (reduce proc init list), (fold-left proc init list) | 왼쪽 누산 | 콜백 정확히 한 값 |
| (fold-right proc init list) | 오른쪽 누산 | 콜백 정확히 한 값 |
| (string-map proc string), (vector-map proc vector) | 왼쪽부터; 새 결과 | 콜백 정확히 한 값; 문자열 결과는 문자여야 함 |
| 문자열/벡터/목록 for-each | 왼쪽부터 효과; 전체 0개 값 | 콜백 결과를 버림 |
| (apply proc arg ... final-list) | 공통 적용 디스패처; 꼬리 안전 | 프로시저 결과 패킷 보존 |
흔한 오해
이 프로시저들은 일부 Scheme의 여러 목록 변형이 아니라 컬렉션 하나만 받습니다. 문자열 문자와 벡터 원소는 첫 콜백 전에 스냅샷하므로 순회 중 원본 벡터를 바꿔도 방문할 원소는 달라지지 않습니다.
다음으로
코드를 작성할 때 이 페이지를 곁에 두세요. 안내식 설명이 필요하면 문법 지도나 관련 매뉴얼로 돌아가면 됩니다.