PROGN 특수 연산자
PROGN 특수 연산자 (progn)
progn은 Common Lisp의 특수 연산자로, 폼들을 주어진 순서대로 평가해요. 마지막 폼을 제외한 각 폼의 값은 버려지고, 마지막 폼의 값이 결과가 돼요. 여러 폼을 순서대로 실행하고 싶은데 문법상 하나의 폼만 쓸 수 있는 자리에 쓸 때 유용해요.
문법 (Syntax)
progn form* => result*
인자와 값 (Arguments and Values)
forms— 암시적 progn이에요.results—form들의 값이에요.
설명 (Description)
progn은 주어진 순서대로 form들을 평가해요. 마지막 폼을 제외한 각 폼의 값은 버려져요.
progn이 최상위 폼(top level form)으로 나타나면, 그 progn 안의 모든 폼들도 컴파일러가 최상위 폼으로 간주해요.
예제 (Examples)
(progn) => NIL
(progn 1 2 3) => 3
(progn (values 1 2 3)) => 1, 2, 3
(setq a 1) => 1
(if a
(progn (setq a nil) 'here)
(progn (setq a t) 'there)) => HERE
a => NIL
if의 두 갈래가 각각 폼 하나만 넣을 수 있는 자리인데, progn으로 두 폼씩 묶은 모습이에요.
영향 (Affected By)
없음.
예외 상황 (Exceptional Situations)
없음.
함께 보기 (See Also)
prog1,prog2- Section 3.1 (Evaluation)
참고 (Notes)
Common Lisp의 많은 곳이 암시적 progn(implicit progn) 문법을 써요. 즉 문법의 일부로 여러 폼을 쓸 수 있는데, 마지막 폼을 제외한 모든 폼의 결과를 버리고 마지막 폼의 결과를 반환하며 순차적으로 평가한다는 뜻이에요. 이런 자리에는 (이에 국한되지 않지만) 람다 표현식의 몸체, 여러 제어·조건 폼(예: case, catch, progn, when)의 몸체가 있어요.