고차 프로시저

`map`, `filter`, `reduce`, fold, `for-each`, 벡터·문자열 변형, `apply`는 평가기 적용 경로로 게스트 프로시저를 호출합니다.

실행으로 확인하기

LISPEX
(fold-right cons (list) (list 1 2 3))

관측 결과

OUTPUT
(1 2 3)

이 순서로 생각하세요

  • 목록·문자열·벡터는 왼쪽부터 순회합니다. 예외는 fold-right로, 오른쪽부터 (f element accumulator)를 호출합니다.
  • reducefold-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의 여러 목록 변형이 아니라 컬렉션 하나만 받습니다. 문자열 문자와 벡터 원소는 첫 콜백 전에 스냅샷하므로 순회 중 원본 벡터를 바꿔도 방문할 원소는 달라지지 않습니다.

다음으로

코드를 작성할 때 이 페이지를 곁에 두세요. 안내식 설명이 필요하면 문법 지도나 관련 매뉴얼로 돌아가면 됩니다.

문법 한눈에 보기 · 학습 경로