다중 값과 값 컨텍스트

다중 값은 평가 결과이며 저장 가능한 게스트 값이 아닙니다. 각 연속 위치는 받을 값 개수를 선언합니다.

언제 필요한가요?

한 계산이 서로 연관된 결과 여러 개를 자연스럽게 만들고 곧바로 정해진 소비자에게 넘길 때 다중 값을 사용하세요. 묶음을 데이터로 저장해야 한다면 리스트나 벡터가 맞습니다.

실행으로 확인하기

LISPEX
(call-with-values (lambda () (floor/ 17 5)) list)

관측 결과

OUTPUT
(3 2)

예제 읽기

floor/는 몫 3과 나머지 2를 두 값으로 냅니다. call-with-values가 이를 list의 두 인자로 넘기고, list가 일시적인 값 묶음을 저장 가능한 (3 2)로 바꿉니다.

이 순서로 생각하세요

  • 단일 값 컨텍스트는 정확히 하나를 요구하며 0개 또는 2개 이상이면 E320입니다.
  • 폐기 컨텍스트는 개수와 무관하게 받고 call-with-values는 생산자 패킷을 소비자 인자로 전달합니다.
  • values의 각 피연산자 자체는 왼쪽부터 평가되는 단일 값 컨텍스트입니다.

빠르게 고르기

문맥받는 값 개수
일반 피연산자나 바인딩 초기식정확히 하나(+ (values 1) 2)
begin의 마지막 전 폼개수 무관, 버림(begin (values 1 2) 3)
call-with-values 생산자개수 무관(lambda () (values 1 2))
call-with-values 소비자생산 개수를 받을 수 있어야 함(lambda (a b) ...)
저장할 집합리스트/벡터 값 하나(list 1 2)

흔한 오해

다중 값은 리스트나 벡터로 박싱되지 않습니다.

현재 경계

  • 한 값이 필요한 곳의 (values)는 미지정 센티널이 아니라 오류입니다.

다음으로

실용 가이드에서 생산자와 소비자를 만들고, 소비자 쪽 실패는 프로시저 인자 수에서 확인하세요.

다중 값 가이드 · 프로시저와 인자 수