프로시저, 인자 수, 적용, apply

고정·점 인자 클로저는 어휘 스코프와 결정적 인자 평가를 사용하며 직접 호출과 `apply`는 하나의 적용 디스패처를 공유합니다.

언제 필요한가요?

하나의 변환에 이름이 필요하거나 다른 프로시저에 동작을 넘겨야 할 때 프로시저를 만드세요. 이름 있는 축약형이 가장 읽기 쉽고, 작고 로컬한 동작은 lambda가 편합니다.

실행으로 확인하기

LISPEX
(define (sum first . rest) (apply + first rest))
(sum 1 2 3 4)

관측 결과

OUTPUT
10

예제 읽기

sum은 인자를 적어도 하나 요구합니다. first1을 받고 rest는 새 리스트 (2 3 4)를 받습니다. apply가 명시한 first와 이 리스트를 합쳐 +를 한 번 호출합니다.

이 순서로 생각하세요

  • 인자 수 불일치는 프로시저 본문 시작 전 E302입니다.
  • 점 나머지 매개변수는 남은 인자로 만든 새 올바른 리스트를 받습니다.
  • apply는 앞선 명시 인자와 마지막 올바른 리스트 하나를 받으며 꼬리 위치를 보존합니다.

빠르게 고르기

형태잘 맞는 용도인자 수
(define (f x) body)이름 있는 재사용 프로시저고정
(lambda (x y) body)익명 프로시저 값고정
(lambda args body)모든 인자를 리스트 하나로 받기0개 이상
(lambda (x . rest) body)필수 인자와 나머지고정 부분 이상
(apply f a final-list)데이터로 모은 인자 적용f가 검사

흔한 오해

프로시저가 아닌 값을 적용하면 E301이며 apply의 부적절한 마지막 리스트는 리스트 도메인 오류입니다.

현재 경계

  • 게스트 클로저 실행에 호스트 apply를 사용하지 않습니다.

다음으로

고차 프로시저에서 map, filter, fold에 동작을 넘기는 법을 보고, 바인딩에서 클로저가 캡처하는 셀을 확인하세요.

고차 프로시저 · 바인딩과 스코프