MULTIPLE-VALUE-PROG1 특수 연산자

MULTIPLE-VALUE-PROG1 특수 연산자 (multiple-value-prog1)

multiple-value-prog1은 Common Lisp의 특수 연산자로, 첫 번째 폼을 평가해 **그 폼이 만든 모든 값(multiple values)**을 저장해 두고, 나머지 폼들을 왼쪽에서 오른쪽으로 평가해서 그 값들은 버려요. 즉 뒤의 폼들이 부수 효과를 내는 동안, 첫 폼의 여러 반환 값을 지켜주는 도구예요.

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

문법 (Syntax)

multiple-value-prog1 first-form form* => first-form-results

인자와 값 (Arguments and Values)

  • first-form — 폼이며, 아래 설명대로 평가돼요.
  • form — 폼이며, 아래 설명대로 평가돼요.
  • first-form-resultsfirst-form의 평가에서 나온 값들이에요.

설명 (Description)

multiple-value-prog1first-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을 만들어요. 그다음 tempnil로 바꾸고 다시 (values-list temp)를 호출하지만 그 결과는 버려져요. 결국 처음의 1, 2, 3이 그대로 반환돼요.

부수 효과 (Side Effects)

없음.

영향 (Affected By)

없음.

예외 상황 (Exceptional Situations)

없음.

함께 보기 (See Also)

  • prog1

참고 (Notes)

없음.

더 알아보기 (Learn more)