MULTIPLE-VALUE-CALL 특수 연산자
MULTIPLE-VALUE-CALL 특수 연산자 (multiple-value-call)
multiple-value-call은 Common Lisp의 특수 연산자로, 각 폼의 **모든 값(multiple values)**을 한데 모아 한 함수에 인자로 넘겨요. 각 폼의 첫 번째 값 하나만 쓰는 보통 호출과 달리, 폼이 만들어내는 모든 값을 다 전달할 필요가 있을 때 써요.
문법 (Syntax)
multiple-value-call function-form form* => result*
인자와 값 (Arguments and Values)
function-form— 폼이며, 평가되어function을 만들어요.function은function-form평가의 결과인 함수 지정자(function designator)예요.form— 폼이에요.results—function이 돌려준 값들이에요.
설명 (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)
없음.