MULTIPLE-VALUE-CALL 특수 연산자

MULTIPLE-VALUE-CALL 특수 연산자 (multiple-value-call)

multiple-value-call은 Common Lisp의 특수 연산자로, 각 폼의 **모든 값(multiple values)**을 한데 모아 한 함수에 인자로 넘겨요. 각 폼의 첫 번째 값 하나만 쓰는 보통 호출과 달리, 폼이 만들어내는 모든 값을 다 전달할 필요가 있을 때 써요.

출처: CLHS: Special Operator MULTIPLE-VALUE-CALL

문법 (Syntax)

multiple-value-call function-form form* => result*

인자와 값 (Arguments and Values)

  • function-form — 폼이며, 평가되어 function을 만들어요. functionfunction-form 평가의 결과인 함수 지정자(function designator)예요.
  • form — 폼이에요.
  • resultsfunction이 돌려준 값들이에요.

설명 (Description)

multiple-value-call은 여러 값(multiple values)들의 집단에서 모은 객체들의 리스트에 function을 적용해요.

먼저 function-form을 평가해 function을 얻고, 그다음 각 form을 평가해요. 각 form모든 값(각 폼에서 값 하나만이 아니라)이 한데 모여 function에 인자로 주어져요.

예제 (Examples)

 (multiple-value-call #'list 1 '/ (values 2 3) '/ (values) '/ (floor 2.5))
=> (1 / 2 3 / / 2 0.5)
 (+ (floor 5 3) (floor 19 4)) == (+ 1 4)
=> 5
 (multiple-value-call #'+ (floor 5 3) (floor 19 4)) == (+ 1 2 4 3)
=> 10

첫 예시에서 (values 2 3)은 두 값 2, 3을, (values)는 값이 없고, (floor 2.5)2, 0.5를 만들어요. 이 모든 값이 #'list에 인자로 모여 (1 / 2 3 / / 2 0.5)가 돼요. 두 번째에서 (floor 5 3)1, 2를, (floor 19 4)4, 3을 만들어 #'+에 모두 더해져 10이 나와요.

부수 효과 (Side Effects)

없음.

영향 (Affected By)

없음.

예외 상황 (Exceptional Situations)

없음.

함께 보기 (See Also)

  • multiple-value-list, multiple-value-bind

참고 (Notes)

없음.

더 알아보기 (Learn more)