MULTIPLE-VALUE-PROG1 특수 연산자
MULTIPLE-VALUE-PROG1 특수 연산자 (multiple-value-prog1)
multiple-value-prog1은 Common Lisp의 특수 연산자로, 첫 번째 폼을 평가해 **그 폼이 만든 모든 값(multiple values)**을 저장해 두고, 나머지 폼들을 왼쪽에서 오른쪽으로 평가해서 그 값들은 버려요. 즉 뒤의 폼들이 부수 효과를 내는 동안, 첫 폼의 여러 반환 값을 지켜주는 도구예요.
문법 (Syntax)
multiple-value-prog1 first-form form* => first-form-results
인자와 값 (Arguments and Values)
first-form— 폼이며, 아래 설명대로 평가돼요.form— 폼이며, 아래 설명대로 평가돼요.first-form-results—first-form의 평가에서 나온 값들이에요.
설명 (Description)
multiple-value-prog1은 first-form을 평가해 그 폼이 생산한 모든 값을 저장해요. 그다음 각 form을 왼쪽에서 오른쪽으로 평가하며 그 값들을 버려요. prog1이 첫 폼의 값 하나만 보존한다면, 이 특수 연산자는 첫 폼의 여러 값을 모두 보존해요.
예제 (Examples)
(setq temp '(1 2 3)) => (1 2 3)
(multiple-value-prog1
(values-list temp)
(setq temp nil)
(values-list temp)) => 1, 2, 3
(values-list temp)가 세 값 1, 2, 3을 만들어요. 그다음 temp를 nil로 바꾸고 다시 (values-list temp)를 호출하지만 그 결과는 버려져요. 결국 처음의 1, 2, 3이 그대로 반환돼요.
부수 효과 (Side Effects)
없음.
영향 (Affected By)
없음.
예외 상황 (Exceptional Situations)
없음.
함께 보기 (See Also)
prog1
참고 (Notes)
없음.